关闭内部for循环,内部IIFE是什么?

时间:2016-08-15 11:13:23

标签: javascript

我一直在处理有关闭包的文章:Understand Javascript Closures with Ease

最后一个例子处理for循环中的闭包。

我理解为什么使用IIFE来捕获' i'的当前值。作为' j'。我对这个例子不太了解的原因是为什么第二个内部IIFE缠绕在return语句中。 (我的评论在下面的代码中以大写字母表示。)

在没有内部IIFE的情况下,代码似乎工作正常。 See CodePen here.

这个内部功能是出于某种原因需要,还是仅仅是作者的疏忽?

function celebrityIDCreator (theCelebrities) {
var i;
var uniqueID = 100;
for (i = 0; i < theCelebrities.length; i++) {
    theCelebrities[i]["id"] = function (j)  { // the j parametric variable is the i passed in on invocation of this IIFE
        return function () {   //<--WHY DOES THIS INNER FUNCTION NEED TO BE HERE?
            return uniqueID + j; // each iteration of the for loop passes the current value of i into this IIFE and it saves the correct value to the array
        } () // BY adding () at the end of this function, we are executing it immediately and returning just the value of uniqueID + j, instead of returning a function.
    } (i); // immediately invoke the function passing the i variable as a parameter
}

return theCelebrities;
}

var actionCelebs = [{name:"Stallone", id:0}, {name:"Cruise", id:0},{name:"Willis", id:0}];

var createIdForActionCelebs = celebrityIDCreator (actionCelebs);

var stalloneID = createIdForActionCelebs [0];
console.log(stalloneID.id); // 100

var cruiseID = createIdForActionCelebs [1];
console.log(cruiseID.id); // 101

var willisID = createIdForActionCelebs[2];
console.log(willisID.id); //102

1 个答案:

答案 0 :(得分:4)

正如您所观察到的,内部功能没有实际效果。使用它没有意义。

这似乎是文章中前一个示例的保留,其中返回了一个函数而不是一个数字。