たとえば、WeChatアプレットの出力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);
}
})
}
出力:
ただし、関数の外部でiを定義すると、ループのグローバル変数と同等になります。
let i;
for (i = 0; i < 10; i++) {
wx.showToast({
title: 'haha',
success: function () {
console.log(i);
}
})
}
結果はまだです: