我在控制台运行了一下代码,为什么这里的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 ,让实参把它给形成参来使用!同样可以解决问题哈~

希望可以帮到你!

0
0

韩跑跑

2019-03-13

到最后这段代码返回的是变量a的值,变量a = '<a>9<br></a>',每次循环,变量a都会被被重新赋值,所以不是0123456789

0
0

双越

2019-03-09

截图中“这是一个错误的写法!!!”—— 没看到吗?这种写法,本来就会全部弹出 9 。

0
0

BAT大牛带你横扫初级前端JavaScript面试(第二版)

BAT高级前端工程师亲授,结合真实面试题,提高面试成功几率

4268 学习 · 817 问题

查看课程