考虑这块蛋糕…呃,代码:
'use strict'
function doWork () {
return new Promise(function (resolve, reject) {
// work work work...
// Done! But... where's the resolve() ???
})
}
doWork().then(function doMoreWork () {
// Some more work to do...
})
一旦 Promise 构造函数中的函数执行完毕...
Promise
对象是否可被垃圾回收?doMoreWork()
是否可被垃圾回收?
我猜想 doMoreWork()
无法直接进行 GC,因为 Promise 保留了对它的引用,但是一旦 Promise 函数体执行结束并将执行上下文返回给上层(?)作用域,堆栈展开(因为这里没有更多的语句需要执行),Promise 就变得不可达,从而可以进行垃圾回收。
你能确认我对这个主题的理解是否正确吗?
我如何通过实验证明这种行为? 换言之,我如何监视何时及其它哪些对象正在进行 GC 运算?我纯粹在 Node.js 中进行开发,如果这有任何区别。
resolve()
吗?是的,那种情况下,您所有的对象都会立即受到垃圾回收的影响。 - Bergi