ES6笔记之 let && const

let && const

let

let声明的变量只在其地点的代码块内有效。

{
    let a = 10;
}
console.log(a)   //ReferenceError:a is not defined

let声明变量不存在变量提拔

let不像var那样会发作“变量提拔”征象,所以,变量肯定要在声明后运用,不然就会报错。

console.log(a)   //ReferenceError:a is not defined
let a = 10;

暂时性死区

只需块级作用域内存在let关键字,它所声明的变量就绑定这个地区,不再受外部影响。

var tmp = 20;
if(true){
    tmp = 'abc';    //ReferenceError:tmp is not defined
    let tmp;
}

上面的代码中存在全局变量tmp,然则块级作用域内let又声清楚明了一个局部变量tmp,致使后者绑定了这个块级作用域,所以在let声明变量前,对tmp赋值会报错。

ES6明确规定,假如区块中存在let和const敕令,则这个区块对这些敕令声明的变量从一最先就构成关闭作用域。只需在声明之前运用这些变量,就会报错。在语法上称为“暂时性死区(temporal dead zone,TDZ)”

有时候,会不经间碰到比较隐藏的“死区”,不太轻易被发明。

function bar(x=y,y=2){
    return [x,y];
}
bar() //报错

上面的代码中是因为参数x的默认值即是另一个参数y,而此时y还没有声明,属于死区。

不允许反复声明

let不允许在雷同的作用域内声明同一个变量。

function bar(){
    let a = 10;
    var a = 20; 
}
//报错

function bat(){
    let a = 10;
    let a = 20;
}
//报错

因而,所以也不能在函数内反复声明参数:

function bar(args){
    let args = 10;  
}
bar() //报错

function bar(args){
    {
        let args = 20;
    }
}
bar()  //不报错

块级作用域

运用let和const能够完成块级作用域
  • 外层代码块不受内层代码块的影响。

  • 外层作用域没法读取内层作用域的变量。

  • 内层作用域能够定义外层作用域的同名变量。

块级作用域的完成,使得普遍运用的自实行匿名函数(IIFE)变得不再必要了。

//自实行形式
(function(){
    var a = 10;
})()


//块级作用域写法
function(){
    let a = 10;
}

函数自身的作用域也在其地点的块级作用域以内。

const

const用来声明常量。一旦声明,其值就不能再转变。

const PI = 3.1415;
const PI = 3  //TypeErrorL "PI" is read-only

const声明的变量不得转变值,意味着const一旦声明常量就必需马上初始化,不能留到背面赋值。

const与let关键字一样,只在声明地点的块级作用域内有效;const关键字声明的常量也不提拔,一样存在暂时性死区,只能在声明后运用。

关于复合型数据类型,常量名不指向数据,而是指向数据地点的地点。const关键字只是保证常量名指向的地点稳定,并不保证该地点的数据稳定,所以将一个对象声明为常量必需注重该点。

    原文作者:krew
    原文地址: https://segmentfault.com/a/1190000004398644
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞