在JavaScript中通过引用返回?

MTV*_*TVS 10 javascript

在JavaScript函数中是否通过引用返回除Boolean和Numbers之外的对象?

当这些对象在它们所属的函数终止时被销毁时,这怎么可能?

Ken*_*rey 18

在对它们的所有引用都消失并收集垃圾之前,对象不会被销毁.返回对象时,调用代码获得对它的引用,并且不会对对象进行垃圾回收.

从技术上讲,被调用函数的堆栈帧在返回时会被销毁.但是,该对象不在堆栈上,而是在堆上.函数对该对象的本地引用位于堆栈上,因此被销毁,但调用代码的引用直到一段时间后才会被销毁.

作为旁注,返回它的方式并不重要,因为函数返回后无法使用该对象.


zer*_*kms 8

在JavaScript函数中是否通过引用返回除Boolean和Numbers之外的对象?

确实,JavaScript中的对象总是通过引用传递

当这些对象在属于的函数终止时被破坏时怎么可能?

只销毁引用,而不是值本身.只要没有引用,对象就是垃圾收集的候选对象.


Nat*_*nes 6

那里有两个很棒的答案,但我想我应该补充一点,它很容易测试:

function modify(arg) {
    arg.modified = true;
}
test = 4;
modify(test);
console.log(test.modified); // undefined
test = {};
modify(test);
console.log(test.modified); // true
test = "";
modify(test);
console.log(test.modified); // undefined
Run Code Online (Sandbox Code Playgroud)

其中undefined表示已复制而不是通过引用传递.请注意,字符串也不通过引用传递.