以下两段代码执行结果为什么不一样,闭包

for(var i=1;i<=20;i++){
    var x=i;
    setTimeout(function () {
        console.log(0.05*x);
    },50*x);
}
for(var i=1;i<=20;i++){
    (function (x) {
        setTimeout(function () {
            console.log(0.05*x);
        },50*x);
    })(i);
}


天生我才必有用哈
浏览 400回答 1
1回答

pardon110

前者是值引用,后者是值复制。换句话而言,后者才是闭包(立即函数调用表达式会形成一个执行环境,该环境有内部函数执行体依赖的每次循环变量的副本),而前者在循环体结束后,执行循环体,此时函数体引用的的i值是20,而非每次的循环变量值
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript