在讨论为什么外部,启动功能似乎是最内在的功能?

时间:2017-12-22 05:01:15

标签: javascript currying

在简单的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;
&#13;
&#13;

我知道它可以这样工作,我可以可靠地重现这一点。但是,我无法理解为什么会这样做的机制。如果我制作了100层示例图层1将是最里面的函数,并且该图案将从该点向外工作。什么样的基本机制导致了这个?非常感谢任何输入!

2 个答案:

答案 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”#“字符串值。