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肯定可以的,这个没有问题,大神们,帮我解答一下吧!!!
姬神ブラック
9 years, 10 months ago
Answers
代码没有问题,在 babel online repl 运行正常。
是宿主环境的问题,Node.js 的宿主环境(甚至 io.js 的宿主环境)还没有完全实现对
const
的兼容,具体可见
es6 compatible table
如果非要在 node 下使用,可以先用 babel transpile
bj7610
answered 9 years, 10 months ago
你的提问有点混乱的感觉,下次应该描述更清晰一些。。
for..in 语法:
for (variable in object) {
...
}
variable 每次迭代,一个不同的属性名将会赋予 variable object 可枚举属性被迭代的对象
for (const key in object) // 每次 key 都会被赋值
魔理沙的弟弟
answered 9 years, 10 months ago