javascript赋值运算符数组

mun*_*nge 1 javascript

在分配对象(比如数组)时,我不理解赋值运算符.我被告知,作为赋值运算符复制引用.然而,它似乎复制数据.例如:

var globArray = [];

function test() {
  var names = ["craig", "silva"];
  globArray = names;
}//endFunction test

function test2() {
  console.log("el1: ", globArray[0], "el2: ", globArray[1]);
}//endFunction test2
Run Code Online (Sandbox Code Playgroud)

当我调用TEST时,它会创建数组NAMES并将全局数组"globArray"分配给NAMES.现在它超出了范围,所以"名字"消失了,对吧?然后我调用test2,但它会显示元素!因此它必须使整个对象都复制,而不是仅仅复制引用.

有人可以解释一下吗?

Poi*_*nty 6

当你的"测试"函数返回时,你说"名字"已"消失"是正确的.但是,它的不是,因为它已被赋值给全局变量.的的"名称"局部变量是一个参考到阵列对象.该引用被复制到全局变量中,因此现在该全局变量还包含对数组对象的引用.

对象分配是一个全局性的事情.当一个对象被局部变量分配和引用时,当局部变量在其作用域变为非活动状态时消失时,它将被垃圾收集,除非存在对该对象的其他引用(直接或间接).直接引用就像你的情况一样.如果本地范围"泄漏"包含对局部变量的引用的函数,则可能发生间接引用.