- 21
- 0
很普通的一个例子,但是关于let的块级作用域,有一些不明白
第一个这么写我可以理解:
var i;
for(i=0; i<10; i++){
(function(i){
var a = document.createElement("a");
a.innerHTML = i + "<br>";
a.addEventListener("click", function (e){
e.preventDefault();
alert(i);//这里的i不是for循环的i,这个是function自己的i,而for循环的i是全局的i。这里的i是随便取的名字,也可以叫num,都行;
});
document.body.appendChild(a);
})(i);
}
每次循环一下,就创建一个函数,而把全局的i的当前值赋给函数的参数(局部的),防止全局污染,相当于创建了10个函数
换成let,可以简单的实现这个功能,但是我就搞不太懂为什么了,虽然不是全局变量了,但是感觉跟全局变量的意思是一样的:
for(let i=0; i<10; i++){ //用let,因为let有块级作用域,所以就可以了
var a;
a = document.createElement("a");
a.innerHTML = i + "<br>";
a.addEventListener("click", function (e){
e.preventDefault();
alert(i);
});
document.body.appendChild(a);
}
i的作用域就是在for里,不再是全局的了, 找当时生成的时作用域,当时传进来的i是多少,这里i就是多少。感觉这样并不能说服我自己,为什么alert(i); i还保持了当时的值呢?for循环不是也早就执行完了吗,咋不是10?
0
打赏
收藏
点击回答
- 共 0 条
- 全部回答
更多回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部

