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肯定可以的,这个没有问题,大神们,帮我解答一下吧!!!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
代码没有问题,在 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 参考