欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

var与let、const解析

程序员文章站 2023-11-17 09:58:43
var 与 let、const 为什么经典的var声明容易让人迷惑,然后介绍es6新引入的块级作用域绑定机制及其最佳实践。 var声明及变量提升(hoisting)机制 在函数作用域或全局作用域中通...

var 与 let、const

为什么经典的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声明对象后,可以修改该对象的属性值。