var、let、const之间的区别


一、var

在ES5中,顶层对象的属性和全局变量是等价的,用var声明的变量既是全局变量,也是顶层变量

注意:顶层对象,在浏览器环境指的是window对象,在 Node 指的是global对象

二、let

let 是ES6新增的命令,用来声明变量

用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效

let不允许在相同作用域中重复声明

三、const

const声明一个只读的常量,一旦声明,常量的值就不能改变

区别:
  • 1. 变量提升

    var 声明的变量存在变量提升,即变量可以在声明之前调用,值为undefined

    letconst 不存在变量提升,即它们所声明的变量一定要在声明后使用,否则报错

console.log(a)   // undefined
var a= 10

console.log(b)  // Cannot access 'num' before initialization
let b = 20

console.log(c)  // Cannot access 'num' before initialization
const c = 30
  • 2. 块级作用域

    var 不存在块级作用域

    letconst 存在块级作用域

{
    var a = 10
}
console.log(a)  // 10

{
    let b = 20
}
console.log(b)  // Uncaught ReferenceError: b is not defined

{
    const c = 30
}
console.log(c)  // Uncaught ReferenceError: c is not defined
  • 3. 重复声明

    var 允许重复声明变量

    letconst 在同一作用域不允许重复声明变量

var a = 10
a = 20
console.log(a)  // 20

let b = 10
b = 20
console.log(b)  // 20

const c = 10
c = 20
console.log(c) // Uncaught TypeError: Assignment to constant variable
  • 4. 修改声明的变量

    varlet 可以

    const 声明一个只读的常量。一旦声明,常量的值就不能改变

var a = 10
a = 20
console.log(a)  // 20

let b = 10
b = 20
console.log(b)  // 20

const c = 10
c = 20
console.log(c) // Uncaught TypeError: Assignment to constant variable
总结:能用const的情况尽量使用const,其他情况下大多数使用let,避免使用var
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容