我是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]());
提前致谢。
答案 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 }}