gpt4 book ai didi

javascript - 嵌套函数和闭包是不同还是相同?

转载 作者:行者123 更新时间:2023-12-02 23:05:45 33 4
gpt4 key购买 nike

嵌套函数还可以访问外部函数变量和参数,对于闭包来说也是如此,它们之间的确切区别是什么?

最佳答案

嵌套函数对于闭包来说是必要的,但它本身还不够。外部函数的作用域中必须有一个可供内部函数使用的变量,并且还必须有一种方法可以从外部函数作用域之外的某个位置调用内部函数。发生这种情况的一种简单方法是从外部函数返回内部函数:

function makeAdder(x) {
return function(y) {
return x + y;
}
}

var addOne = makeAdder(1);
var addTwo = makeAdder(2);

console.log(addOne(2));
console.log(addTwo(2));

在这个相当简单的示例中,内部函数被称为“关闭”外部变量x。一旦 makeAdder 完成执行,按照通常的作用域规则,x 变量应该被丢弃 - 但它在 makeAdder 执行时所具有的值从某种意义上说,调用是由返回的函数 addOneaddTwo“记住”的。这种对变量的“记住”正是闭包。

闭包在 Javascript 程序中随处可见,通常开发人员甚至没有意识到这一点。作为回调传递给其他函数的函数(例如,setTimeout、事件处理程序、Ajax 回调...)是该语言的一个非常常见的功能,所有这些都自然会导致闭包的形成。

在每种情况下,都存在嵌套函数,因为没有嵌套函数就不可能有闭包 - 但有一个普通或花园嵌套函数,例如:

function f() {
....
function g() {

}
....
}

不一定会导致关闭。 (至少,不是像通常使用的术语那样。有些人会说技术上的闭包仍在发生,但我认为使用没有帮助。)只有当以下两个条件同时成立时,在此示例中才会真正出现闭包:

  • g 可以从 f 范围之外调用
  • f 范围内有一些变量,g 可以访问和/或更改

我强烈建议您阅读this关于什么是闭包以及如何使用它们的精彩而详细的概述。

关于javascript - 嵌套函数和闭包是不同还是相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57599264/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com