javascript——let关键字

在ES2015后,引入了两个关键字let和const

let关键字

  在引入let关键字和const之间,JavaScript里只有两种作用域:全局作用域和函数作用域,引入两个关键字后,提供了块级{}作用域

全局作用域:

  全局(函数外面)声明的变量有全局作用域(使用var声明的),全局变量可以在JavaScript的任何地方访问。

函数作用域:

  局部(函数里面)声明的变量拥有局部作用域(使用var声明的),局部变量只可以在被声明的函数内部使用。

块级作用域:

  通过var申明的变量是没有块级作用域的,在{}里使用var声明的变量任然可以在{}外被访问。

  使用let申明的变量拥有块级作用域

块级作用域可解决的问题:

(1)重新声明变量

  在块级外使用var声明一个变量,在块级里也使用var声明同名的变量,会将外部的变量的值也修改了。

  在块级外使用var声明一个变量,在块级里也使用let声明同名的变量,不会修改外部同名的变量的值。

(2)在函数内声明变量时候,使用var和let是相同的效果

(3)在函数外使用var和let声明变量都有全局作用域

Html中的全局变量:

  使用JavaScript的情况下,全局作用域是JavaScript环境。在HTML中全局作用域是window对象。通过var关键字定义的全局变量属于window对象,通过let关键字定义的全局变量不属于window对象。

注意:

  • 允许在程序的任何地方使用var重新声明JavaScript变量。
  • 在相同的作用域,或在相同的快中,通过let重新声明一个var变量是不允许的。
  • 在相同的作用域,或在相同的快中,通过let重新声明一个let变量是不允许的。
  • 在相同的作用域,或在相同的快中,通过var重新声明一个let变量是不允许的。
  • 在不同的作用域或者块中,通过let重新声明变量是允许的

通过var声明的变量会被提升到顶端,可以在声明变量之前就使用它

通过let声明的变量不会被提升到顶端,在声明它之前就使用它会出错。