1
for(var i = 0; i < 4; i++) {
setTimeout(function(i) {
console.log(i);
}, (i + 1) * 1000);
}
2
for(var j = 0; j < 4; j++) {
(function(i) {
setTimeout(function() {
console.log(i);
}, (i + 1) * 1000);
})(j);
}
第二个我知道是立即执行函数(只是传了个参数,不算是闭包哈),第一个访问不到是不是因为当函数执行时,其上下文执行环境是window中,从而访问不到i。
还有一个疑问,如果我想给setTimeout(fn,1000)中的fn传实参,我一般该怎么传?
setTimeout( fn(实参) ,1000)这样是不行的啊,fn会立即执行,除了类似第二个,我还想到当i是window中的变量也可以访问到,大家有什么其它的办法吗?
for(var i = 0; i < 4; i++) {
setTimeout(function(i) {
console.log(i);
}, (i + 1) * 1000, i);
}