ES6 中let const

2018-03-29  本文已影响0人  c6e71129966d

let 

存在块级作用域

(1)外层作用域取不到内层作用域的变量

(2)内层作用域可以定义外层作用域的同名变量。

所声明的变量,只在let命令所在的代码块内有效

if(true){

let a = "123";

console.log(a);  //123

}

console.log(a);       //ReferenceError  a is not undefined

for循环还有一个特别之处,就是设置循环变量的那部分是一个父作用域,而循环体内部是一个单独的子作用域

for(let i=0;i<3;i++){

    let i='abc';

    console.log(i);

}

// abc// abc// abc

上面代码正确运行,输出了 3 次abc。这表明函数内部的变量i与循环变量i不在同一个作用域,有各自单独的作用域。


不存在变量提升:在变量声明之前使用,都是会报错的。以前的var声明的变量可以变量提升,在变量声明之前使用,值为 undefined。但是使用let声明的变量,一定要在let声明之后


 暂时性死区:在代码块(块级作用域)内存在let命令它所声明的变量,就“绑定”这个区域,不再受外界影响。

例子:

var temp = 123;

if(true){

    temp = 'aaa';      //Reference Error

    let temp;

}

因为在块级作用let 声明了一个局部变量,导致这个变量绑定了这个块级做哟用于,所以在let声明变量之前,对temp 赋值会报错。  (代码块内,使用let命令声明变量之前,该变量都不可用)

~~~~~~~~~~~~~~~~~分割线~~~~~~~~~~~~~

在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ)

if(true){

// TDZ开始

tmp='abc'; // ReferenceErrorconsole.log(tmp); // ReferenceError

let tmp; // TDZ结束console.log(tmp); // undefinedtmp=123;console.log(tmp); // 123}


不允许重复声明

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

// 报错

functionfunc(){

        let a=10;

        var a=1;

}

// 报错

function func(){

        let a=10; 

        let a=1;

}

function func(arg) {

        let arg; // 报错

}

function func(arg) {

    {

        let arg; // 不报错

    }

}


const

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

const一旦声明就必须立即初始化,不能留到以后赋值

与let相同的是:

        只在声明所在的块级作用域内有效

        有暂时性死区(必须在声明之后才能使用)。

        const命令声明的常量也不能提升。

        const声明的常量,不可重复声明。

上一篇 下一篇

猜你喜欢

热点阅读