2015-11-01 59 views
0

這是在for循環體中獲取塊範圍的最短可能方式嗎?在JavaScript中編寫塊作用域的最簡單方法是什麼?

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

或者是否有任何我無法找到的語法糖?

說明:

With塊範圍創建的對象具有不同的值。

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"}

+1

取決於不管你是願意使用ES6或不... –

回答

2

既然你使用的是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; }; 
}); 
+0

感謝指出現在存在「讓」。這解釋得相當好:http://davidwalsh.name/for-and-against-let – ceving

相關問題