探索JavaScript:let、const和var的全面解析

发表时间: 2022-12-16 09:55

varJavaScriptES6之前使用的变量定义关键字。通过var声明的变量,会挂载在当前定义的函数执行上下文。若在最外层定则变量就挂载在全局执行上下文,即window对象下。而const和let则是ES6中提出的定义变量或常量关键字,其中const用于声明常量,let则是用于声明局部变量关键字。

var

var定义的变量可以修改,不强制要求初始化,未初始化则输出undefined。简单使用如下:

var a = 1; //此处声明的变量a为全局变量function foo(){   var a = 2;//此处声明的变量a为函数foo的局部变量   console.log(a);//2}foo();console.log(a);//1

特点:

  • 存在变量提升
  • 可多次声明,后面声明会覆盖之前的声明
  • 函数声明var变量会有隔离的效果,这时该变量为局部变量,外部无法访问

let

let是ES6之后提出的用于声明局部变量。其作用域为代码块区域,let的使用示例如下:

let a = 1;console.log(a);//1console.log(b);//Uncaught ReferenceError: b is not definedlet b = 2;function foo(){    let a = 1;    let a = 2;//Uncaught SyntaxError: Identifier 'a' has already been declared}

特点:

  • let作用域块状作用域,如函数内或代码块内,如for循环内
  • 同一个代码块内不允许重复声明
  • 不影响作用域链
  • 不同于var的是let不存在变量提升

const

const是和let一样在ES6之后别加入的关键词,const被设计专门用于声明常量,示例如下:

const a = 1;console.log(a);//1a = 2;console.log(a);//Uncaught TypeError: Assignment to constant variable.

特点:

  • 块级作用域,和let一样
  • 不允许作用域内重复声明
  • 值不允许修改,对于引用类型而言不可修改引用类型指向,但可以修改引用类型内部属性值