JavaScript调用看起来很有趣

JavaScript - invocation looks funny

本文关键字:看起来 调用 JavaScript      更新时间:2023-09-26

我是JavaScript的新手,所以我一直在读一本名为《说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]()); 

提前谢谢。

要打破最后一行:

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

[1]-访问生成的数组的第二个元素。数组是从零开始的,所以索引0是第一个,1是第二个。方括号用于访问数组元素或对象属性。

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

函数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
函数f返回一个函数数组,每个函数返回其在数组中的索引位置。

这只是先调用f()来获取数组,然后获取索引1处的函数f()[1],然后调用该函数来获取最终结果f()[1]()的一种简写方式。