我有一些代码在循环中调用匿名函数,类似于这个伪示例:
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"建议"实际上是否会影响代码的效率?
循环中的闭包导致我出现问题.我想我必须创建另一个函数来返回一个函数来解决问题,但我无法使用我的jQuery代码.
以下是简化形式的基本问题:
function foo(val) {
alert(val);
}
for (var i = 0; i < 3; i++) {
$('#button'+i).click(function(){
foo(i);
});
}
Run Code Online (Sandbox Code Playgroud)
自然地点击三个按钮中的任何一个都会发出警告说3.我想要的功能是点击按钮1将发出警告说1,按钮2会说2等.
我该怎么做呢?
我遇到了以下循环的问题:
for (var i = 0; i < dataElements; ++i){
d=document.createElement('div');
$(d).addClass('overviewbit')
.appendTo('.overview')
.click(function(){
id = i;
});
}
Run Code Online (Sandbox Code Playgroud)
每个Div都将id设置为循环的最高值,但我应该是创建时得到的确切值.所以第一个div应该设置为1,第二个div应该设置为2,依此类推.我希望你能理解我的问题并帮助我找到解决方案.