我在控制台运行了一下代码,为什么这里的a标签的内容会是9呢?为什么不是10呢?
来源:16-10 作用域和闭包--解题
fishdo
2019-03-09
我在控制台运行了一下代码,为什么这里的a标签的内容会是9呢?为什么不是0 1 2 3 4 5 6 7 8 9呢?


写回答
3回答
-
兮漫天
2019-04-27
上面代码,点击的话弹出结果是10,标签从0-9生成10个标签!
解决这个问题,使用下块级作用域的概念就好了,代码可以这么改造一下
for (let i = 0; i < 10; i++) {
let a = document.createElement('a');
a.innerHTML = i + '<br>';
a.addEventListener('click', function (event) {
event.preventDefault; // 阻止默认事件
alert(i)
})
document.body.append(a);
}
这样你点击就会弹出对应的索引号了!
第二种方法你可以使用传统的 for 在点击之前得到当前标签第[i].index = i; 把循环的i的值给它
第三种方法你可以使用一个闭包 retrun 一个函数,通过形参实参的方法得到 for 里面的i ,让实参把它给形成参来使用!同样可以解决问题哈~
希望可以帮到你!
00 -
韩跑跑
2019-03-13
到最后这段代码返回的是变量a的值,变量a = '<a>9<br></a>',每次循环,变量a都会被被重新赋值,所以不是0123456789
00 -
双越
2019-03-09
截图中“这是一个错误的写法!!!”—— 没看到吗?这种写法,本来就会全部弹出 9 。
00
相似问题