for循环值在Promise.then()里面

For loop value in Promise.then() inside

我对 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是否一样?

我知道通过测试我已经做到了,但是我找不到任何 documentation/example 说明 promise.then 中的 singleObject 将与 promise 之前的 singleObject 相同。

promise.then 中的 singleObject 是否始终与 promise 之前的 singleObject 在同一范围内?

不是 100% 确定,但我会说 singleObject 前后确实是一样的。我相信它可能是对原始对象的引用? 检查的方法是修改 arrayObject 中的一个对象,然后打印 arrayObjectfinalArray,检查你修改的对象是否在两个中都被修改。

是的,两个变量都包含对同一对象的引用。与Promise.then无关。就是箭头函数的closure

res => { if (res === true) { finalArray.push(singleObject) } } 

A closure is the combination of a function bundled together (enclosed) with references to its surrounding state (the lexical environment). In other words, a closure gives you access to an outer function's scope from an inner function. In JavaScript, closures are created every time a function is created, at function creation time.

甚至全局范围也是 closure scope chain:

的一部分

Every closure has three scopes:

  • Local Scope (Own scope)
  • Outer Functions Scope
  • Global Scope