为何Promise构造函数内部无法引用自身变量p1?
问题解析:Promise构造函数内无法访问p1但能访问d的原因
先看你的代码:
var d = 7; var p1 = new Promise((a, b) => { console.log(p1); // 输出 undefined console.log(d); // 输出 7 a('whatever'); });
核心原因是变量赋值时机与Promise构造函数的同步执行特性共同作用:
var变量的提升与赋值阶段
- 使用
var声明的变量会被提升到当前作用域顶部,但赋值操作要等到代码执行到对应行时才完成。 var d = 7执行时,声明提升后立刻完成赋值,所以后续代码中d能拿到7这个值。var p1 = new Promise(...)中,p1的声明被提升,但赋值要等new Promise(...)整个表达式执行完毕,把生成的Promise实例赋值给p1后才完成。
- 使用
Promise构造函数的回调是同步执行的
- 调用
new Promise(executor)时,传入的executor回调函数会立刻同步执行,不会等到Promise实例完全创建完成后再触发。 - 这意味着executor执行时,
p1的赋值还没完成(当前正在生成要赋值给p1的Promise实例),所以此时p1的值是变量提升后默认的undefined。
- 调用
简单总结:executor回调运行时,p1还没拿到Promise实例,而d已经完成赋值,因此出现你看到的结果。
内容的提问来源于stack exchange,提问作者Das Raf
相关产品推荐
相关产品推荐

