总结var const let

var、const、let

var

  • var定义的变量可以修改,如果不初始化会输出undefined,不会报错。
  • 关键字 var 声明一个变量,那么这个变量就属于当前的函数作用域,如果声明是发生在任何函数外的顶层声明,那么这个变量就属于全局作用域
  • 在声明变量时,省略 var 的话,该变量就会变成全局变量,如全局作用域中存在该变量,就会更新其值。
  • var 声明的变量存在提升,而let、const不会被提升
    其实是:let和const定义的变量都会被提升,但是不会被初始化,不能被引用,不会像var定义的变量那样,初始值为undefined。会报:Uncaught ReferenceError:Cannot access ‘foo’ before initialization,如果没有定义,会报:VM325:1 Uncaught ReferenceError: aaa is not defined】。

let

  • let 声明的变量不存在变量提升(好理解)【提升不被初始化】,换一种说法,就是 let 声明存在暂时性死区,在let/const声明之前就访问对应的变量与常量,会抛出ReferenceError错误。称为 暂时性死区
    -【ES6明确规定,如果区块中存在let命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。所以在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ)。】
  • let 声明的变量只在 let 命令所在的代码块 {} 内有效,在 {} 之外不能访问。
  • 在同一个块级作用域,不能重复声明变量。

const

  • 具备let的上述特点
  • 当声明const时,不赋值会报错。
  • const 声明的变量其内部内容不可变,但这并不意味着它所持有的值是不可变的,只是变量标识符不能重新分配。
    const obj = {a:1,b:2};
    obj.a = 3;

以上是我从各个大佬博客中总结。欢迎补充!

猜你喜欢

转载自blog.csdn.net/qq_42835377/article/details/103394581