在分配对象(比如数组)时,我不理解赋值运算符.我被告知,作为赋值运算符复制引用.然而,它似乎复制数据.例如:
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,但它会显示元素!因此它必须使整个对象都复制,而不是仅仅复制引用.
有人可以解释一下吗?
当你的"测试"函数返回时,你说"名字"已"消失"是正确的.但是,它的值不是,因为它已被赋值给全局变量.的值的"名称"局部变量是一个参考到阵列对象.该引用被复制到全局变量中,因此现在该全局变量还包含对数组对象的引用.
对象分配是一个全局性的事情.当一个对象被局部变量分配和引用时,当局部变量在其作用域变为非活动状态时消失时,它将被垃圾收集,除非存在对该对象的其他引用(直接或间接).直接引用就像你的情况一样.如果本地范围"泄漏"包含对局部变量的引用的函数,则可能发生间接引用.
| 归档时间: |
|
| 查看次数: |
683 次 |
| 最近记录: |