var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
// and store them in funcs
funcs[i] = function() {
// each should log its value.
console.log("My value: " + i);
};
}
for (var j = 0; j < 3; j++) {
// and now let's run each one to see
funcs[j]();
}
Run Code Online (Sandbox Code Playgroud)
它输出这个:
我的价值:3
我的价值:3
我的价值:3
而我希望它输出:
我的价值:0
我的价值:1
我的价值:2
使用事件侦听器导致运行函数的延迟时,会出现同样的问题:
var buttons = document.getElementsByTagName("button");
// let's create 3 …
Run Code Online (Sandbox Code Playgroud)在这种情况下解决jslint错误的正确方法是什么?我正在为使用它的对象添加一个getter函数.如果不在循环内创建函数,我不知道如何做到这一点.
for (var i = 0; i<processorList.length; ++i) {
result[i] = {
processor_: timestampsToDateTime(processorList[i]),
name_: processorList[i].processorName,
getLabel: function() { // TODO solve function in loop.
return this.name_;
}
};
}
Run Code Online (Sandbox Code Playgroud) 我有一些代码在循环中调用匿名函数,类似于这个伪示例:
for (i = 0; i < numCards; i = i + 1) {
card = $('<div>').bind('isPopulated', function (ev) {
var card = $(ev.currentTarget);
....
Run Code Online (Sandbox Code Playgroud)
JSLint报告错误"不要在循环中创建函数".我喜欢保持我的代码JSLint干净.我知道我可以将匿名函数移出循环并将其作为命名函数调用.除此之外,这是我的问题:
Javascript解释器是否真的会为每次迭代创建一个函数实例?或者只有一个函数实例"已编译"并且重复执行相同的代码?也就是说,将函数移出循环的JSLint"建议"实际上是否会影响代码的效率?