我對 node.js 的 for 回圈中的 promise.then() 有疑問。
對于這樣的代碼:
const arrayObject = [
{
id: 1234,
toto: 'abc'
},
{
id: 5678,
toto: 'def'
},
{
id: 910,
toto: 'ghi'
},
]
const finalArray = []
let promiseArray = []
for (let singleObject of arrayObject) {
promiseArray.push(
Promise.function(...).then(res => {
if (res === true) {
finalArray.push(singleObject)
}
})
)
}
await Promise.all(promiseArray)
如果 promise 之前的 singleObject 是 'id: 1234',那么 promise 中的 singleObject 會不會一樣?
我知道通過我所做的測驗,但我找不到任何檔案/示例說明 promise.then 中的 singleObject 將與 promise 之前的 singleObject 相同。
promise.then 中的 singleObject 是否始終與 promise 之前的 singleObject 處于同一范圍內?
uj5u.com熱心網友回復:
是的,兩個變數都包含對同一個物件的參考。它與 . 無關Promise.then。這是箭頭函式的閉包
res => { if (res === true) { finalArray.push(singleObject) } }
閉包是捆綁在一起(封閉)的函式與對其周圍狀態(詞法環境)的參考的組合。換句話說,閉包使您可以從內部函式訪問外部函式的范圍。在 JavaScript 中,每次創建函式時都會在創建函式時創建閉包。
甚至全域范圍也是閉包范圍鏈的一部分:
每個閉包都有三個作用域:
- 本地范圍(自己的范圍)
- 外部函式范圍
- 全球范圍
uj5u.com熱心網友回復:
不是 100% 肯定,但我會說singleObject前后確實是一樣的。我相信它可能是對原始物件的參考?檢查的方法是修改 中的物件之一arrayObject,然后列印兩者arrayObject和finalArray,檢查您修改的物件是否在兩者中都被修改。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/458862.html
標籤:javascript 节点.js 承诺
