var arr = [];
for(var i=0; i<3; i++) {
arr[i] = function(){
console.log(i)
}
}
//输出 3 3 3
//因为闭包。即使他的上下文已经销毁,但是它仍然存在,依然引用外部变量
//改写1 利用立即执行函数 开辟封闭的变量作用域环境
for(var i=0; i<3; i++) {
(function(i){
arr[i] = function(){
console.log(i)
}
})(i)
//改写1.2
for(var i=0; i<3; i++) {
arr[i] = function(i){
return function() {
console.log(i)
}
}(i)
}
// 改写2 //利用let行程封闭作用域
for(let i=0; i<3; i++) {
arr[i] = function(){
console.log(i)
}
}
//改写3 //利用了 参数传递 按值传递
function getNumber(i) {
return function() {
console.log(i)
}
}
for(var i=0; i<3; i++) {
arr[i] = getNumber(i)
}
}
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。