ES6入门——let和const命令

来源:互联网 发布:access数据库能仓库 编辑:程序博客网 时间:2024/04/30 09:52

let命令

ES6新增了let命令用于声明变量。它的用处和var很相似,只不过let所声明的变量只在let命令所在的代码块内有效。看下下面代码:

  {        let a = 10;        var b = 9;    }    alert( a );  // ReferenceError: a is not defined    alert( b );  //9

再看看下面代码:

var a = [];    for(var i = 0; i < 10; i++) {        var c = i;        a[i] = function() {            console.log( c );        };    }    a[6]();  //9

而如果使用let声明的话,最后输出的值是“6”。代码如下:

var a = [];for (var i = 0; i < 10; i++) {        let c = i;        a[i] = function() {            console.log( c );        };}a[6]();  //6

此外,let声明的变量不会提升。看下下面的代码片段。

    function do_someting() {        console.log( a );  //ReferenceError        let a = 2;    }

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

    // 报错    {        let a = 10;        var a = 1;    }    // 报错    {        let a = 10;        let a = 1;    }

let实际上是JavaScript增加的块级作用域。

    function foo() {        let n = 6;          if (true) {            let n = 10;        }        console.log( n ); //6    }

上面代码有两个代码块,都声明了n变量,运行后输出的是6。这表明外层代码块不受内层代码块的影响。如果,改成使用var定义变量n的话,最后输出的就是10.

另外,ES6还规定,函数本身的作用域在其所在的代码块作用域之内。

    function f() { console.log("I am outside"); }    (function () {        if (false) {            //重复声明一次函数f            function f() {                console.log("I am inside");            }        }        f();    }());

上面的代码片段,在ES5中运行会得到“Iam inside”, 但是在ES6中运行,则会得到“Iam outside”

const命令

const是用来声明常量的。一旦声明,其值就不能改变。

    const PI = 3.1415;    console.log( PI ); //PI    PI = 3;    console.log( PI );  //3.1415    const PI = 3.1;    console.log( PI );  //3.1415

有一点需要我们注意的是,对常量的重复定义不会报错,它只会默默的失败。

const的作用域与let命令相同:即只在声明所在的块级作用域内有效。

    if(condition) {        const MAX = 5;    }    // 常量MAX在此处不可见(或者说不可得)

此外,const常量也不可重复声明。

    var message = "Hello!";    let age = 25;    //以下两行都会报错    const message = "Goodbye!";    const age = 30;
0 0