将本地引用分配给全局
Assigning local reference to global
这是我无法理解的地方。
我这里有这个功能
function foo(){
let a = {a:1};
window.a = a;
}
如您所见,这分配给 a
一个对象,因此是对它的引用,然后它在包含此引用的 window 对象上创建一个新的 属性 .如果 a
变量是本地的,它是指向堆栈中地址的引用,那么,当堆栈被清理时,我如何从 window 访问 a
,也在函数之外?
If the a variable is local, it's reference point to an address in the stack
没有。虽然变量可能分配在包含引用的堆栈上,但它引用的内容(对象)可能分配在“堆”上,因为 - 正如您已经注意到的那样 - 它的生命周期是未知的,因此必须由垃圾收集器,不能 stack-allocated.
也就是说,“堆栈”与“堆”的区别并不能完全反映现代 JIT-compilers 的现实。
这是我无法理解的地方。
我这里有这个功能
function foo(){
let a = {a:1};
window.a = a;
}
如您所见,这分配给 a
一个对象,因此是对它的引用,然后它在包含此引用的 window 对象上创建一个新的 属性 .如果 a
变量是本地的,它是指向堆栈中地址的引用,那么,当堆栈被清理时,我如何从 window 访问 a
,也在函数之外?
If the a variable is local, it's reference point to an address in the stack
没有。虽然变量可能分配在包含引用的堆栈上,但它引用的内容(对象)可能分配在“堆”上,因为 - 正如您已经注意到的那样 - 它的生命周期是未知的,因此必须由垃圾收集器,不能 stack-allocated.
也就是说,“堆栈”与“堆”的区别并不能完全反映现代 JIT-compilers 的现实。