es6学习let,const遇到问题
const 定义常量,一旦定义就不能更改了。所以下面的函数执行回报错:
var funcs = [];
for (const i=0; i < 10; i++) {
funcs.push(function() {
console.log(i);
});
}
没有问题,确实报错了。因为它试图改变了const定义的常量值。
但是在for-in 和 for-of 循环中可以用,这个例子中也说可以用????
var funcs = [],
object = {
a: true,
b: true,
c: true
};
for (const key in object) {
funcs.push(function() {
console.log(key);
});
}
funcs.forEach(function(func) {
func(); // outputs "a", then "b", then "c"
});
这个函数应该可以执行,并没有改变const定义的常量值。我们是改变的循环体中的函数绑定罢了,并没有改变const数值,但是实际执行的时候,报错了。(在node环境下执行的node 12)
看有关的资料也可以执行的。。。
换成let肯定可以的,这个没有问题,大神们,帮我解答一下吧!!!
姬神ブラック
10 years ago
Answers
代码没有问题,在 babel online repl 运行正常。
是宿主环境的问题,Node.js 的宿主环境(甚至 io.js 的宿主环境)还没有完全实现对
const
的兼容,具体可见
es6 compatible table
如果非要在 node 下使用,可以先用 babel transpile
bj7610
answered 10 years ago
你的提问有点混乱的感觉,下次应该描述更清晰一些。。
for..in 语法:
for (variable in object) {
...
}
variable 每次迭代,一个不同的属性名将会赋予 variable object 可枚举属性被迭代的对象
for (const key in object) // 每次 key 都会被赋值
魔理沙的弟弟
answered 10 years ago