不同的变量范围使用" let"浏览器间的关键字

时间:2016-06-29 16:56:02

标签: javascript function loops scope

如果您在ChromeFirefox执行此代码,则会返回不同的行为。



var obj = {
  key: 'val',
  key2: 'val'
};

function x(b) {
  setTimeout(b, 1000);
}

var keys = Object.keys(obj);
for (let ki of keys) {
  x(function() {
    console.log(ki); // Prints key2 key2 in Firefox, key key2 in Chrome
  });
}




为什么会这样?这是一个错误吗?应该是Chrome返回的那个输出正确的输出吗?

1 个答案:

答案 0 :(得分:1)

我说这是一个错误。您可以尝试在启用了Babel的jsBin上运行它,并在FireFox中看到Chrome行为:

http://jsbin.com/nadikatari/edit?html,js,console,output

听起来FireFox还没有实现。如果你想在此时使用ES6,你真的应该使用Babel转发到ES5。