用JavaScript编写块作用域的最短方法是什么

What is the shortest possible way to write a block scope in JavaScript?

本文关键字:方法 是什么 作用域 JavaScript      更新时间:2023-09-26

这是在for循环的主体中获取块作用域的最短方法吗?

x = {};
for (i of ['a', 'b']) {
  (function(i) {
    x[i] = function() { this.v = i; }
  })(i);
}

或者有什么句法上的糖我找不到?

解释:

对于块范围,创建的对象具有不同的值。

new x.ax.(anonymous function) {v: "a"}
new x.bx.(anonymous function) {v: "b"}

无块范围

y = {};
for (i of ['a', 'b']) {
  y[i] = function() { this.v = i; }
}

所创建的对象将具有相同的值。

new y.ay.(anonymous function) {v: "b"}
new y.by.(anonymous function) {v: "b"}

假设您使用的是ES6 for of循环,那么您的迭代变量已经有了块作用域——只是不要忘记使用let/const声明!不需要IEFE。

let x = {};
for (let i of ['a', 'b'])
    x[i] = function() { this.v = i; };

如果您不使用ES6,我建议您使用Array迭代方法之一,如

var x = ['a', 'b'].map(function(i) {
    return function() { this.v = i; };
});