我需要创建多个内部具有静态 id 的javascript函数,因此函数本身知道要处理的数据。
以下是一些代码:
(function(){
function log(s){
if(console && console.log) console.log(s);
else alert(s);
}
var i = 10; while (i--){
window.setTimeout(function(){
// i need i to be 10, 9, 8... here not -1
log(i);
},500);
}
})();
问题是 i 总是被循环更新,我需要阻止它。
预先感谢您提供任何帮助,意见或建议!
答案 0 :(得分:3)
只需创建一个函数并调用它。
while (i--) {
(function(i) {
// use i here
})(i);
}
答案 1 :(得分:3)
(function(){
function log(s){
if(console && console.log) console.log(s);
else alert(s);
}
var i = 10; while (i--){
(function() { // start anon func
var copy = i; // copy loop variable
window.setTimeout(function(){
log(copy); // refer to copy
},500);
})(); // end anon func and call it immediately
}
})();
答案 2 :(得分:2)
在每次迭代中使用立即调用的函数的一种更好的方法是让log()
函数返回一个函数。
(function(){
function log(s){
return function() {
if(console && console.log) console.log(s);
else alert(s);
};
}
var i = 10; while (i--){
window.setTimeout( log( i ),500 );
}
})();
总体结果是你最终构造了更少的函数对象。
如果您希望呼叫间隔时间,请使用setInterval()
或更改此设置:
window.setTimeout( log( i ), 500 );
到此:
window.setTimeout( log( i ), i * 500 );