【问题标题】:What is the shortest possible way to write a block scope in JavaScript?在 JavaScript 中编写块作用域的最短方法是什么?
【发布时间】:2015-11-01 14:54:23
【问题描述】:

这是在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...

标签: javascript scope


【解决方案1】:

鉴于您使用的是 ES6 for of 循环,无论如何,您的迭代变量已经拥有块作用域 - 只是不要忘记使用 let/const 声明!不需要 IEFE。

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

如果你不使用 ES6,我建议使用Array iteration methods 之一,比如

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多