比如在微信小程式中要遍歷輸出 0-9 的數,我們會使用for回圈
for (var i = 0; i < 10; i++) {
console.log(i);
}
輸出:

但是,如果我在回圈時同時呼叫wx的api介面10次,那么輸出的結果就會不同(這是產生了閉關的效應)
for (var i = 0; i < 10; i++) {
wx.showToast({
title: 'haha',
success: function () {
console.log(i);
}
})
}
輸出:
![]()
可以看到輸出了10次10,這是因為i自變數的作用域范圍,在這里它相當于全域變數,
可以理解為一個存盤單元與與分配的所以下屬存盤單元都相通(自己的理解)
解決方法:
1、使用臨時函式(兼容所有)
for (var i = 0; i < 10; i++) {
(function (j) {
wx.showToast({
title: 'haha',
success: function () {
console.log(j);
}
})
})(i);
}
等同于
for (var i = 0; i < 10; i++) {
function temp(j) {
wx.showToast({
title: 'haha',
success: function () {
console.log(j);
}
})
};
temp(i);
}
輸出:

2、使用ES6中let的塊作用域(推薦)(低版本IE不兼容)
for (let i = 0; i < 10; i++) {
wx.showToast({
title: 'haha',
success: function () {
console.log(i);
}
})
}
輸出:

但是如果將let i定義在函式外部,則對于回圈來說還是相當于全域變數
let i;
for (i = 0; i < 10; i++) {
wx.showToast({
title: 'haha',
success: function () {
console.log(i);
}
})
}
結果還是:
![]()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/252653.html
標籤:其他
