当我阅读有关ES 6功能的内容时,我发现let
用于创建块范围。这个link对ES6功能和let语句有很好的解释。那么开发人员如何在旧版ECMAScript中创建此block scopes
,如ES5。
以下代码段解释了let
var es = [];
for (var i = 0; i < 10; i++) {
let c = i;
es[i] = function () {
console.log("Upcoming edition of ECMAScript is ES" + c);
};
}
es[6](); // Upcoming edition of ECMAScript is ES6
ES5中的等效代码是什么?
上面没有let
的代码段,10
输出i
,因为它在全球范围内。
var es = [];
for (var i = 0; i < 10; i++) {
es[i] = function () {
console.log("Upcoming edition of ECMAScript is ES" + i);
};
}
es[6](); // Upcoming edition of ECMAScript is ES10
此link在ES5中具有ES6等效项,并建议将IIFE
用于块作用域。但我不确定如何在当前情况下使用IIFE。
非常感谢任何帮助。
提前致谢。
答案 0 :(得分:4)
它建议将IIFE用于块范围。
在ES5中,只调用一个函数会创建一个新范围。所以“很明显”,如果你想创建一个新的范围(每次迭代),你必须调用一个函数。这就是IIFE的作用:它创建一个新功能并立即调用它。
任何块作用域的变量(例如通过let
)都将成为函数的参数,初始值将作为参数传递。
示例:
for (var i = 0; i < 10; i++) {
(function(c) {
es[i] = function () {
console.log("Upcoming edition of ECMAScript is ES" + c);
};
}(i));
}
当然这是简化的,可能会出现需要更复杂解决方案的情况。
答案 1 :(得分:2)
目前的最佳做法是编写ES2015(ES6)并通过Babel之类的预处理器运行代码。 Babel了解了在旧浏览器上支持let
的实现细节。
如果您想直接使用ES5,可以create an anonymous function在每次迭代中传递i
的值。
var es = [];
for (var i = 0; i < 10; i++) {
(function (i) {
es[i] = function () {
console.log("Upcoming edition of ECMAScript is ES" + i);
};
})(i);
}
es[6]();