var 与 let、const

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_25354709/article/details/82635056

为什么经典的var声明容易让人迷惑, 然后介绍ES6新引入的块级作用域绑定机制及其最佳实践。

var 声明及变量提升(Hoisting)机制

在函数作用域或全局作用域中通过关键字var声明的变量,无论实际上是在哪里声明的,都会被当成在当前作用域顶部声明的变量,这就是我们常说的提升(Hoisting)机制。

变量value的声明被提升至函数顶部,而初始化操作依旧留在原处执行,这就意味着在else字句中也可以访问到该变量,且由于此时变量尚未初始化,所以其值为 undefined。

所以, ES6引入块级作用域来强化对变量生命周期的控制。

块级声明

块级声明用于声明在指定块的作用域之外无法访问的变量。块级作用域(亦被称为词法作用域)

存在于:

  • 函数内部
  • 块中 (字符 {和} 之间的区域)

let声明

let声明的用法和 var相同。 用let代替var来声明变量,就可以把变量的作用域限制在当前代码块中。

由于let声明不会被提升,因此开发者通常将let声明语句放在封闭代码块的顶部,以便整个代码块都可以访问。

禁止重声明

假设作用域中已经存在某个标识符,此时再使用let关键字声明它就会抛出错误。

const声明

ES还提供了const关键字,使用const声明的是常量,其值一旦被设定后不可更改。

因此,每个通过const声明的常量必须进行初始化。

//有效的常量
const name = 30;

//语法错误:常量未初始化
const name;

const 与 let

const与let声明的都是块级标识符,所以常量也只在当前代码块内有效,

一旦执行到块外会立即被销毁。常量同样也不会被提升至作用域顶部。

与let相似,在同一作用域用const声明已经存在的标识符也会导致语法错误,无论该标识符是使用var(在全局或函数作用域中),还是let(在块级作用域中)声明的。

var msg = "Hello";
let age = 25;

//这两条语句都会抛出错误
const msg = "Hello";
const age = 30;

无论在严格模式还是在非严格模式下,都不可以为const定义的常量再赋值。

用const声明对象

用const声明对象后,可以修改该对象的属性值。

猜你喜欢

转载自blog.csdn.net/qq_25354709/article/details/82635056