frr*_*lod 2 javascript variables closures global function
var count = 0;
for ( var i = 0; i < 4; i++ ) {
setTimeout(function(){
assert( i == count++, "Check the value of i." );
}, i * 200);
}
Run Code Online (Sandbox Code Playgroud)
为什么这不起作用(i每次等于4而不是相等)?count, var是在全局范围内创建的,为什么它们在函数内部不可用?
(我想解释为什么这不起作用,我找到了一种方法,通过将其包装在另一个函数中来实现它,只是想要理解)
用这个; i的值将在每个setTime内部为4,因为循环已经完成并且值为
匿名函数将通过创建新上下文来保留其中的变量.
var count = 0;
for ( var i = 0; i < 4; i++ ) {
(function(i){
setTimeout(function(){
assert( i == count++, "Check the value of i." );
}, i * 200);
})(i);
}
Run Code Online (Sandbox Code Playgroud)