JavaScript关闭:返回一个函数

时间:2016-08-10 13:44:39

标签: javascript closures

我正在通过Douglas Crockford的JavaScript系列讲座。我对他所展示的代码示例感到困惑,以说明'封闭':



query << "SELECT blah blah FROM blah blah WHERE status_id IN(?, ?)"
query << " AND end_date IS NULL "
...
ActiveRecord::Base.connection.select_all(query.join, STATUS_1, STATUS_2)
&#13;
&#13;
&#13;

如果定义中没有指定参数(最外面的函数),var digit_name = (function () { var names = ['zero', 'one', 'two', 'three']; return function (n) { return names[n]; }; }()); alert(digit_name(3));如何/为什么可以参数?在调用期间,参数(在本例中为digit_name)如何知道内部函数定义中的3

3 个答案:

答案 0 :(得分:2)

digit_name存储外部函数编写的内部函数return,这是立即执行的函数表达式,其中内部函数具有带有一个参数的签名,这就是digit_name中存储的内容。

function (n) {
  return names[n];
}

最终,上面的内容将是digit_name,而names是一个私有变量,它与digit_name的环境捆绑在一起。私有变量的概念只能使用闭包。

要说清楚,请看:

enter image description here

答案 1 :(得分:0)

Theres一个自我调用,匿名函数(function(){})()。所以digit_name不是函数,它的函数输出是return语句。所以这发生在浏览器中:

var digit_name=(function(){})();
var digit_name=function(n){}

答案 2 :(得分:0)

外部函数是一个IIFE,一个立即调用的函数表达式。脚本启动时会运行该函数,因此IIFE返回的内部函数是分配给digit_name的函数。

&#34;魔法&#34;如果这个内部函数仍然可以访问闭包中的所有东西(例如names数组),那么闭包。

https://developer.mozilla.org/en-US/docs/Glossary/IIFE