如何將下面的程式碼用es6的let實現,
for(var i = 0; i < 3;i++) {
(function(j){
$.ajax({
url: 'xxx',
success: function(){
console.log(j);
}
})(i);
})
}
我想大声告诉你2017-06-30 10:01:41
題主想問的是,在ES6
中怎麼解決
i不是當前的
i`的問題吧?
在ES5
中是使用閉包來解決的,在ES6
中可以用let
for(let i = 0; i < 3;i++) {
$.ajax({
url: 'xxx',
success: function(){
console.log(i);
}
});
}
世界只因有你2017-06-30 10:01:41
把 var
換成 let
for(let i = 0; i < 3;i++) {
$.ajax({
url: 'xxx',
success: function(){
console.log(j);
}
})
}
測試如下(用setTimeout模擬非同步請求):
for(var i = 0; i < 3;i++) {
setTimeout(function(){
console.log(i)
}, 123)
}
印3個3
es5用閉包解決
for(var i = 0; i < 3;i++) {
(function(i) {
setTimeout(function(){
console.log(i)
}, 123)
})(i)
}
es6用let就簡單了
for(let i = 0; i < 3;i++) {
setTimeout(function(){
console.log(i)
}, 123)
}
let
允許你宣告一個作用域被限制在區塊層級中的變數、語句或表達式
阿神2017-06-30 10:01:41
我也找到答案了,ES6可以直接去掉閉包
for(let i = 0; i < 3;i++) {
$.ajax({
url: 'xxx',
success: function(){
console.log(i);
}
});
}
這樣跟用閉包的結果是一樣的了,謝謝各位