JavaScript - 调用看起来很有趣

时间:2014-10-16 07:20:49

标签: javascript iife invocation

我是JavaScript的新手,所以我一直在读一本名为Speaking JavaScript的书。下面的代码显示了如何为每个函数创建一个新环境,以便隔离每个函数中的值。我得到函数f()的要点,但调用函数f()的最后一行是我不理解的,作者没有解释它。

function f() {

    var result = [];

    for (var i=0; i<3; i++) {

        (function () {  // IIFE
            var pos = i;  // Maka a copy of i
            var func = function () {
                return pos;
            };
            result.push(func);
        }());
    }
    return result;
}

// Returns 1. I don't understand the reason behind having [1]() after f(). 
// The syntax looks funny.
console.log(f()[1]()); 

提前致谢。

3 个答案:

答案 0 :(得分:2)

打破最后一行:

f() - 调用f函数。这返回一个数组,每个数组元素本身就是一个函数。

[1] - 访问结果数组的第二个元素。数组基于零,因此索引0是第一个,1是第二个。方括号用于访问数组元素或对象属性。

() - 立即调用我们刚刚访问过的数组元素的函数。

答案 1 :(得分:0)

函数f返回一个值为0,1,2:

的数组
for (var i=0; i<3; i++) {

    (function () {  // IIFE
        var pos = i;  // Maka a copy of i
        var func = function () {
            return pos;
        };
        result.push(func);

因此,为了向您展示工作代码的示例,作者想要打印到控制台,但不能只调用f,因为数组需要知道要显示的索引,所以他添加了索引位置1所以数组知道你想看到哪条记录。

如果你想将整个数组打印到控制台,你需要遍历数组,调用数组的每个索引。

总结一下:

f returns array
console.write will write to console
[1] is the index
and f()[1] is the position of the array to display

答案 2 :(得分:0)

函数f返回一个函数数组,每个函数都返回数组中的索引位置。

这只是首先调用f()来获取数组,然后在索引1,f()[1]获取函数,然后调用该函数以获得最终结果的简写方法{{1 }}