ECMAScript6入门(一)Let 和 Const 命令【读记】

ECMAScript6入门(一)Let 和 Const 命令


一、let 命令

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

{
    let a = 10;
    var b = 1;
}

a // Uncaught ReferenceError: a is not defined
b // 1

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

下面的代码如果使用 var,则最后输出的是“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 不像 var 那样,会发生“变量提升”的现象。

function do_something () {
    console.log(foo);
    let foo = 2;
}

上面的代码在声明foo之前,就使用了这个变量,结果会抛出一个错误。

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

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

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

二、块级作用域

let实际上为JavaScript新增了块级作用域。

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

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

块级作用域的出现,实际上是的广为应用的立即执行匿名函数(IIFE)不再必要了。

(function (){
    var tem = ...;
    ...
}())

// 块级作用域
{
    let tmp = ...;
    ...
}

另外,ES6也规定,函数本身的作用域,在其躲在的块级作用域之内。

function f () {
    console.log('I am outside!');
}

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

上面的代码在ES5中运行,会得到“I am inside!”,但是在ES6中运行,则会得到“I am outside!”。

三、const 命令

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

const PI = 3.1415;
PI // 3.1415

PI = 3;
PI // 3.1415

const PI = 3.1;
PI // 3.1415

上面的代码表明改变常量的值是不起作用的。需要注意的是,对常量重新赋值不会报错,只会默默地失败。

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

if (codition) {
    const MAX = 5;
}

// 常量MAX在此处不可得

const 声明的常量,也与 let 一样不可重复声明。

var message = "Hello!";
let age = 25;

// 以下两行都会报错
const message = "GoodBye!";
const age = 30;

 

各位小伙伴们想了解更多,欢迎加群技术交流:834223478

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值