【发布时间】:2012-03-16 13:09:15
【问题描述】:
正确的做法是什么...
var array1 = []
var array2 = []
function doIt(arg){
var myArray;
if(arg == 1){
myArray = array1
}else if(arg == 2){
myArray = array2
}
myArray.push('test');
}
doIt(1); //array1 should now be ['test'] but it's empty
【问题讨论】:
-
“它是空的”到底是什么意思?顺便说一句,您缺少一些分号。
-
@AdamBernier:JavaScript 不是插入有用的自动分号以使程序员的生活更轻松吗?另外,我假设“空”的 OP 意味着
array1不包含任何元素(这是因为myArray = array制作了数组的 copy )。 -
@Kerrek SB:你可能是对的;一些开发环境可能会自动插入分号。关于您的第二点:数组是对象并且通过引用传递。
-
Javascript 不通过引用传递。和 Java 一样,对象隐藏在引用后面,它们是按值传递的
-
@ofko - 我认为问题中的代码没有任何问题,只是如果您使用 1 或 2 以外的值调用函数会出现错误(在这种情况下,它会尝试做
undefined.push())。但是对于 1 的值,它应该可以按您的预期工作。是否有任何其他未显示的代码可能会影响它?
标签: javascript pass-by-reference