有人能解释一下这个Javascript闭包示例吗
好的,我对闭包下developer.mozilla上的这个例子有点困惑 如果有人能尽可能详细地解释,以便我了解闭包 忽略console.log,我只是添加了它来查看显示的值,从中我可以看到当执行add5时,x是5,y是2 我安慰add5()看看我得到了什么,我得到了NaN——我猜这是因为我没有指定参数,因为它需要一个参数,并且不能向未定义的参数添加数字 所以混淆的是Madedder内部函数中的论点y 希望有人能提供一个比mozilla更好的解释…我认为线索是环境,但我是新手,所以需要专家的帮助 谢谢有人能解释一下这个Javascript闭包示例吗,javascript,closures,Javascript,Closures,好的,我对闭包下developer.mozilla上的这个例子有点困惑 如果有人能尽可能详细地解释,以便我了解闭包 忽略console.log,我只是添加了它来查看显示的值,从中我可以看到当执行add5时,x是5,y是2 我安慰add5()看看我得到了什么,我得到了NaN——我猜这是因为我没有指定参数,因为它需要一个参数,并且不能向未定义的参数添加数字 所以混淆的是Madedder内部函数中的论点y 希望有人能提供一个比mozilla更好的解释…我认为线索是环境,但我是新手,所以需要专家的帮助
makeAdder
需要一个名为x
的参数,并返回一个需要该参数y
的新函数。执行此内部函数时,外部作用域的x
将添加到参数y
,并返回总和
var add5=makeAdder(5)
将创建内部函数的新实例,并将其存储到add5
<此内部函数的code>x设置为5
。使用add5(2)
执行add5
时,将返回7
,因为x
值(外部范围5
)将添加到参数2
add10
的程序相同
编辑当不传递参数(内部或外部函数或两者)时,参数(y
或x
或两者)将未定义
undefined+number
或undefined+undefined
返回NaN
,因为一个或多个和不是数字
编辑2:过程演练:
var add5=makeAdder(5)代码>将add5
设置为:
function makeAdder(x) {
return function(y) {
console.log("X:" + x + " Y:" + y);
return x + y;
};
}
因为makeAdder(5)
返回其内部函数并将x设置为5。因此,当现在使用var sum=add5(2)执行时代码>此生成的函数将计算并返回5+y
(5+2
)
注意:它并没有真正将x设置为5
(相反,它仍然是对外部x的引用),但我认为这更容易理解,并且不会改变这个特定示例中的任何内容您到底不明白什么,您有什么“困惑”?问题是什么?你读过吗?你对NaN的预感是正确的。只需阅读你上面提供的内容。我的困惑实际上是“y”。这是返回函数的参数,即add5
或add10
的参数。谢谢,这是有道理的,但我仍然对“y”变量感到困惑。我将解释为什么……这都是有道理的,但它是如何决定add5(2)应该是“y”而不是“x”的。对不起,如果我听起来很愚蠢。这解释了你的问题吗?如果是,请标记为已解决
function makeAdder(x) {
return function(y) {
console.log("X:" + x + " Y:" + y);
return x + y;
};
}
function(y) {
console.log("X:" + 5 + " Y:" + y);
return 5 + y;
}