javascript 调用函数作为数组元素

标签 javascript arrays function loops call

我在 Toptal youtube 视频中发现了这个示例,该示例使用的语法无法在 Chrome 中运行,除非我遗漏了某些内容。此示例出现在此处 ( JavaScript closure inside loops – simple practical example ) 并使用相同的语法。为什么这没有为我运行/下面指示的行是否包含有效的语法?

var x, y, funcs = [];

for(x=0; x<5; x++){

    (function(){
        var r = x;
        funcs.push(function(){
        console.log(r);
        });

    });
};  
for (var y=0; y<5; y++){
    funcs[y]();  //<< is this valid JS syntax/why is it not working for me?
};

最佳答案

您需要在定义后添加一对括号 (),使这个匿名函数在第一个 for 循环中自动执行

(function(){
    var r = x;
    funcs.push(function(){
    console.log(r);
    });

})();

如果没有这个,您将继续在第一个循环中声明一个函数,该函数从未执行,因此永远不会将任何内容插入数组中。

第一次循环后,执行 console.log(funcs.length),您将得到 0,因为您的数组没有元素。

您当前的代码将给您未捕获类型错误:funcs[0]不是一个函数,这是因为funcs[0]未定义.

关于javascript 调用函数作为数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32036144/

相关文章:

javascript - 更好的做法 : Always get a range of 6 Items out of an array

typescript - TypeError: book.isEqual 不是一个函数

在不使用外部代码的情况下仅运行其部分代码一次的 Javascript 函数

php - 如何使用 php 将 API 数据(数组)存储到数据库中

c++ - 多个不同的构造函数作为函数参数

javascript - HTML 中的脚本解析顺序

javascript - JavaScript 中的类与函数构造函数

javascript - For(对象中的键)

javascript - ExpressJS 中的 Promise 返回错误

python:制作一个arange数组