ES6新增敕令:let

let的引见

let是ES6新增的敕令。
作用:声明变量。
类似于:var。
与var的区分:运用let声明的变量,只在其地点的代码块内有用。

定义回忆

声明变量:能够用var,也能够不必var。
是不是许可变量提拔:许可。
是不是许可反复声明同一个变量:许可。
变量的作用域:全局作用域、函数作用域。
在全局作用域中,不管是不是运用var,定义的变量都是全局变量。
在函数作用域中,运用var定义函数局部变量,不运用var定义全局变量。
全局变量全局可用,函数局部变量在函数内可用。
代码块:用{}栝起来的代码片断。

基础语法

let声明的变量,只在其地点其地点的代码块内有用。
let不存在变量提拔。
let不许可反复声明。
let不许可在函数的一级作用域内从新声明参数。
let存在的块级作用域,它声明的这个变量或“绑定”这个地区,构成“暂时性死区”,使其不再受外部影响。
就是说,一个变量,不管其在外部是不是声明,只要在某个块级作用域内运用let从新声清楚明了,那末在这个块级作用域内该变量在声明前是不能够运用的。

运用场景

for轮回的计数器
let声明的轮回变量i只在本轮轮回有用,每一次轮回的i都是一个新变量。迥殊的JavaScript引擎内部会记住上一轮轮回的值,初始化本轮的变量i时,是在上一轮轮回的基础上举行盘算。
别的,for轮回设置轮回变量的那部份是一个父作用域,而轮回体内部是一个零丁的自作用域。

代码片断

part 1:var声明变量回忆

<script type="text/javascript">
    var a = 1;
    console.log(a);  // 1
    b = 2;
    console.log(b);  // 2
    console.log(c);  //undefined
    var c = 3;
    var a = 4;
    function showA(){
        console.log(a);
        d = 5;
        console.log(d);
    }
    showA();  // 4,5
    console.log(d);  //5
    function showB(){
        console.log(b);
        var e = 6;
        console.log(e);
    }
    showB();  //2,6
    console.log(e);  //报错
</script>

part 2:let声明的变量时局部变量

<script type="text/javascript">
    {
        var a = 1;
        let b = 2;
    }
    console.log(a);  //1
    console.log(b);  //报错
</script>

part 3:for轮回中运用var定义轮回参数,该参数会变味全局参数

<script type="text/javascript">
    var a = [];
    for(var i = 0; i < 10; i++){
        a[i] = function(){
            console.log(i);
        }
    }
    a[6]();  //10
</script>

part 4:for轮回中运用let定义轮回参数,改参数是块级作用域内的参数

<script type="text/javascript">
    for(let i = 0; i < 10; i++){

    }
    console.log(i);  //报错
</script>

part 5:对照part3,用var定义轮回变量

<script type="text/javascript">
    var a = [];
    for(let i = 0; i < 10; i++){
        a[i] = function(){
            console.log(i);
        }
    }
    a[6]();  // 6
</script>

part 6:for轮回中,外层是一个父作用域,内里的每层轮回是一个自作用域,互不影响

<script type="text/javascript">
    for(let i = 0; i < 3; i++){
        let i = 'abc';
        console.log(i);  //abc,abc,abc
    }
</script>

part 7:let声明的变量不许可变量提拔

<script type="text/javascript">
    console.log(a);  //报错
    let a = 1;
</script>

part 8:块级作用域顶用let声明的变量会构成【暂时性死区】,纵然在全局声清楚明了该变量,也不能在let声明前挪用

<script type="text/javascript">
    let a = 1;
    console.log(a);  //1
    {
        a = 2;
        let a;
        console.log(a);  // 报错
    }
</script>

part 9:let声明的变量不许可反复声明

<script type="text/javascript">
    let a = 1;
    console.log(a);  // 1
    let a = 2;
    console.log(a);  //报错
</script>

part 10:不许可在函数的一级作用域内运用let从新声明参数

<script type="text/javascript">
    function showName(name){
        let name = 'sunny';
        console.log(name);
    }
    showName('lily');   // 报错
</script>

part 11:能够在函数的二级或三级等作用域内运用let从新声明参数,且与一级作用域中的参数互不影响

<script type="text/javascript">
    function showName(name){
        console.log(name);
        {
            let name = 'sunny';
            console.log(name);
        }
    }
    showName('lily');   //lily,sunny
</script>
    原文作者:陈田田
    原文地址: https://segmentfault.com/a/1190000017474550
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞