好像3有些存储在“里面”的第二呼叫过程中的作用与5增加了它,并返回8
权。每个呼叫outside
创建一个新的inside
函数,并且该函数具有绑定到它的呼叫到outside
的数据。它“关闭”了这些数据。这些被称为“封闭”。不要让名字打扰你,closures are not complicated。
第二次调用outside(outside(3)(5))如何返回值(8)而不是第一次调用的内部函数(内部)?
第二次调用outside
确实返回一个功能(由该调用生成的inside
功能);但是随后你会立即用第二对()
调用该函数。
线
outside(3)(5);
...打破了这样的:
var f = outside(3); // Create and get the `inside` function bound to 3
f(5); // Call it, passing in `5`
从您的评论:
那么你的意思是,在第一致电outside(3)
,'返回'inside
方法od定义变成(改为?)返回3 + y;
。是对的吗?
关闭,但不完全。 x
的值不会被烧入inside
; inside
有创建它的上下文的引用,并且该上下文使它可以访问x
参数。这些都是不太一样的东西,因为我们可以看到,如果我们更新了示例位(与沟的数学,这只是掩盖的东西):
function outside(name) {
// 'inside' uses the 'name' argument from the call to 'outside' that created it
function inside() {
return name;
}
// 'changer' *changes* the 'name' argument's value
function makeCaps() {
name = name.toUpperCase();
}
// Return both of them
return {
inside: inside,
makeCaps: makeCaps
};
}
var funcs = outside("foo");
funcs.inside(); // "foo", because 'inside' uses the 'name' created
// by the call to 'outside', and that 'name' is
// currently "foo"
funcs.makeCaps(); // Changes that same 'name'
funcs.inside(); // "FOO", because that 'name' has been changed
这是关键要了解这两个inside
和changer
关过相同上下文,这是创建它们的调用outside
的上下文。
这也是关键要明白,一个新的环境和新的功能是由每个调用创建outside
:
var funcs1 = outside("foo");
var funcs2 = outside("separate");
funcs1.inside(); // "foo"
funcs2.inside(); // "separate"
funcs1.makeCaps();
funcs1.inside(); // "FOO"
funcs2.inside(); // "separate"
@elclanrs也许吧。但我甚至不知道OP在这里有什么问题......它可能是*“函数如何存储在变量中?”或*“变量如何工作?”...... –