循环内的常量声明

ES6规范没有明确禁止在循环中使用const声明,然而它会根据循环方式的不同而有不同行为。在常规的for循环中,你可以在初始化时使用const,但循环会在你试图改变该变量 的值时抛出错误。例如:

var funcs = [];

//在一次迭代后抛出错误
for (const i = 0; i < 10; i++){
    funcs.push(function(){
        console.log(i);
    });
}

在此代码中,i被声明为一个常量。循环的第一次迭代成功执行,此时i的值为0。在i++执行时,一个错误会被抛出,因为该语句试图更改常量的值。因此,在循环中你只能使用const来声明一个不会被更改的变量。

而另一方面,const变量在for-infor-of循环中使用时,与let变量效果相同。因此下面代码不会导致出错:

var funcs = [];
    object = {
        a:true,
        b:true,
        c:true
    }

//不会导致错误
for (const key in object){
    funcs.push(function(){
        console.log(key);
    });
}

funcs.forEach(function(){
    func();           // 依次输出 “a”、“b”、“c”
})

这段代码与“循环内的let声明”小节的第二个例子几乎完全一样,唯一的区别是key的值在 循环内不能被更改。const能够在for-infor-of循环内工作,是因为循环为每次迭代创建了一个新的变量绑定,而不是试图去修改已绑定的变量的值(就像使用了for而不是for-in的上个例子那样)。

results matching ""

    No results matching ""