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肯定可以的,这个没有问题,大神们,帮我解答一下吧!!!
代码没有问题,在 babel online repl 运行正常。
是宿主环境的问题,Node.js 的宿主环境(甚至 io.js 的宿主环境)还没有完全实现对
const
的兼容,具体可见 es6 compatible table如果非要在 node 下使用,可以先用 babel transpile
你用 io.js 试试就可以
这个是因为 io.js 和 node.js 用的 v8 版本不一样
不过即使在 iojs 中,加不加
"use strict"
,效果也是不一样的。只是我不明白,会有什么样的情况需要在这里使用
const
。我是实用主义者,所以一切不实用的语法我都当它不存在。
你要知道
第一个是循环因子 由于i++ 所以i每次都变 这里i必须是个变量
然后的遍历
再看let,可以在{}, if, for里声明。用法同var,但作用域限定在块级,let声明的变量不存在变量提升。
所以let a = '123' a还是个变量
你的提问有点混乱的感觉,下次应该描述更清晰一些。。
for..in 语法:
MDN for...in 参考