我在 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/