ES6快速入门第二章------let和const(可私信解惑)

  • let命令

ES6新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效

{
     let a=222222;
     var b=333333;
}

console.log(a)

以上代码在代码块之中,分别用let和var声明了两个变量。

然后,在代码块之外调用这两个变量。结果let声明的变量报错,var声明的变量返回了正确的值。这表明,let声明的变量只在它所在的代码块有效。

sublime Text3运行js文件命令为 ctrl+b。

  • let不存在变量提升

变量的提升:javascript并不是严格的自上而下执行的语言,它会将当前作用域的所有变量的声明提升到程序的顶部。

如下面代码,变量aa未声明就赋值,赋值完再用var声明,最后输出aa是不会报错的。

但是,使用 let声明变量,在赋值前未声明会报错。

aa=2222;
var aa;
console.log(aa)  //输出2222,当换成 let aa会报错

下面代码输出undefined的原因是 js会将变量的声明提升到顶部,可是赋值语句并不会提升。同样使用let声明就会报错。

console.log(aa)  // 输出undefined
var aa=2222;    // 实际上是分两步执行  var aa;aa=2222;
  • let 暂时性死区

var num=111;
if(1){
    console.log(num);
    let num=222;    //块级作用域内let又声明了一个局部变量num,导致后者绑定这个块级作用域
}

ES6明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量就会报错

总之,在代码块内使用let命令声明变量之前,该变量都是不可用的。

这在语法上,称为“暂时性死区”(temporal dead zone,简称TDZ)。

  • let 不能重复声明同个变量

let不允许在相同作用域内,重复声明同一个变量。

let num=111;
let num=222;  // 报错内容:Identifier 'num' has already been declared
  • const 命令

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

const num=123;
num=456    // 报错内容:TypeError: Assignment to constant variable.

console.log(num)

const声明的变量不得改变值,这意味着,const一旦声明变量就必须立即初始化,不能留到以后赋值。

只声明不赋值同样会报错。

const命令声明的常量和let类似,也是不能变量的提升,同样存在暂时性死区,只能在声明的位置后面使用,只在声明所在的块级作用域内有效,不可重复声明。

const声明的数组

const aa= []; 
aa.push('firstNumber');     // 可执行 
aa.length = 0;      // 可执行 
aa= ['secondNumber'];      // 报错

以上代码说明,const定义的数组本身进行操作是不会报错的,但是将另一个数组赋值给aa会产生错误,因为const声明的常量不能重新赋值。

第三章:ES6快速入门第三章------Symbol数据类型(可私信解惑)

发布了34 篇原创文章 · 获赞 0 · 访问量 723

猜你喜欢

转载自blog.csdn.net/qq_18547381/article/details/104131429