例子:
function checkClosure(){
for(var i=0;i<3;i++){
setTimeout(function(){
alert(i);
},2000);
}
}
checkClosure();
仔细想一想这个函数的执行结果是什么输出0,1,2?
其实只是2,2,2而已,这是因为for循环很快,当两秒后i的值已经是2了,那如何输出0,1,2那?
那我们用到了匿名函数和闭包了
function checkClosure(){
for(var i=0;i<3;i++){
setTimeout(
(function(){
alert(i);
})(i),2000);
}
}
但函数执行到setTimeout时候函数立即执行,就会输出当前i 的值了