let/var

  • 事实上var设计师JavaScript语言设计的一个错误,但是该种错误不能很好的修复和移除。
    • 为了向后兼容,于是就有了新的关键字 let,可以认为是更完美的var
  • 块级作用域
    • js中使用var来申明一个变量时,变量的作用域主要是和函数的定义有关的。
    • 针对于其他块的定义来说就是没有作用域的,比如if/for等,这在我们的开发中往往会引起一些问题。

变量作用域:变量在什么范围内可以使用。
var if 没有块级作用域比如:

if(true){
var name = 'neibu';
}
//在外部可以访问name
console.log(name);

var for 没有块级作用域:

var btns = document.getElementsByTagName('button')
for(var i=0;i<btns.length;i++)
{
btns[i].addEventListener('click',function() {
console.log('第'+i+'个按钮被点击')
})
}
//点击任意个按钮最后输出的 i都是btns.length-1,主要是for中的i变量没有作用域
let 就是为了解决此问题
var btns = document.getElementsByTagName('button')
for(let i=0;i<btns.length;i++)
{
btns[i].addEventListener('click',function() {
console.log('第'+i+'个按钮被点击')
})
}

let的另外的作用

使用var申明的变量或对象,将作为浏览器环境中的window对象的属性,这意味着var很可能在申明一个变量时将覆盖window中原有的全局属性。
此时let或者const申明全局变量可以很好的避免此问题。