关于块级作用域的问题

var box = document.querySelector('.box');    for (var i = 0; i < 10; i++) {        var li = document.createElement('li');
        li.innerHTML = i;
        box.appendChild(li);
        li.addEventListener('click',function(){            console.log(i);
        })
    }

这段代码点击新生产的li标签全是10,高程书中说,闭包只能取得包含函数中任何变量的最后一个值,我理解了很长时间,不明白原委。
第二个问题是,为什么将i的类型设置为let就是点击显示正常,我知道let是块级作用域的概念,那为何块级作用域就能显示正常呢?
有些被绕里了,请大神解释一下,感激不尽了。


缥缈止盈
浏览 687回答 1
1回答

有只小跳蛙

1,这其实是块级作用域的问题,并没有涉及到闭包。2,产生原因在于var与let使用的作用域不同。var 变量的作用域是全局,而let 是局部的块作用域即for循环内,全局变量唯一性,var 声明的变量i在循环中被不断覆盖最终只是唯一的10,因此在外部调用中无论li的哪一个,最终都是10。而let是局部的作用域,并不会被覆盖。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript