如果使用关键字 var 声明一个变量,那么这个变量就属于当前的函数作用域,如果声明是发生在任何函数外的顶层声明,那么这个变量就属于全局作用域。

如果在声明变量时,省略 var 的话,该变量就会变成全局变量,如全局作用域中存在该变量,就会更新其值。

注意:var 声明的变量存在提升(hoisting)。

let 声明的变量,具有如下几个特点:

let 声明的变量具有块作用域的特征。

在同一个块级作用域,不能重复声明变量。

let 声明的变量不存在变量提升,换一种说法,就是 let 声明存在暂时性死区(TDZ)。

const 声明方式,除了具有 let 的上述特点外,其还具备一个特点,即 const 定义的变量,一旦定义后,就不能修改,即 const 声明的为常量。

但是,并不是说 const 声明的变量其内部内容不可变,所以准确的说,是 const 声明创建一个值的只读引用。但这并不意味着它所持有的值是不可变的,只是变量标识符不能重新分配。

总结

var 声明的变量属于函数作用域,let 和 const 声明的变量属于块级作用域;

var 存在变量提升现象,而 let 和 const 没有此类现象;

var 变量可以重复声明,而在同一个块级作用域,let 变量不能重新声明,const 变量不能修改。

var、let、const的区别var定义的变量,没有块的概念,可以跨块访问, 不能跨函数访问。let定义的变量,只能在块作用域里访问,不能跨块访问,也不能跨函数访问。const用来定义常量,使用时必须初始化(即必须赋值),只能在块作用域里访问,而且不能修改。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐