在简单的2层"use strict";
function layer2(x) {
return function(y) {
return console.log(x, y);
}
}
var layer1 = layer2('cat');
layer1('dog');
示例中,单词dog被传递到y参数。
<td>
<div class="container-fluid d-flex justify-content-between align-items-center">
<i class="fas fa-fw fa-chevron-up"></i>
<i class="fas fa-fw fa-chevron-down"></i>
<i class="fas fa-fw fa-star"></i>
</div>
</td>
&#13;
我知道它可以这样工作,我可以可靠地重现这一点。但是,我无法理解为什么会这样做的机制。如果我制作了100层示例图层1将是最里面的函数,并且该图案将从该点向外工作。什么样的基本机制导致了这个?非常感谢任何输入!
答案 0 :(得分:2)
这很简单。当您致电layer2('cat')
时,它将返回功能:
function(y) {
return console.log(x, y);
}
现在,layer1('dog')
返回函数调用return console.log(x,y);
,其中已在调用layer2('cat')
中收到x,并且正在从function(y)
调用y。
这是一个非常好的阅读博客https://javascriptweblog.wordpress.com/2010/10/25/understanding-javascript-closures/,它将为您提供进一步的帮助。
答案 1 :(得分:2)
简而言之,词汇范围是使这成为可能的原因。请参阅示例中的layer2
函数返回另一个在其范围内有两个变量的函数:
y - its own argument
x - parameter passed into `layer2` function
这里的关键点是,一旦存储了返回的函数,x
值就会被设置并且永远不会改变。同样,就您的示例而言,存储在layer1
变量中的函数 - layer2('cat')
的结果 - 已将x
名称绑定到“cat”#“字符串值。