[英]JavaScript Globals - Method Handling
我有多個全局數組,單個方法可以對其執行操作。 該方法一次只需要對一個陣列進行操作。 我想通過將一個參數傳遞給該方法,然后讓該方法決定需要根據該參數修改哪個數組來完成此操作。 例如,
var globalarray1;
var globalarray2;
Operate(globalarray1);
function Operate(globalarray){
globalarray.push("test");
}
當然,上面的代碼僅更改方法范圍內局部數組的值。 我知道我可以做這樣的事情:
var globalarray1;
var globalarray2;
Operate(1);
function Operate(flag){
if (flag == 1){
globalarray1.push("test1");
}
else if (flag == 2){
globalarray2.push("test2")
}
}
但是,感覺不對。 如何在單個方法中使用參數而不使用一堆條件語句來更改全局變量的值?
您的第一種方法是正確的。 但是,此聲明不是:
當然,上面的代碼僅更改方法范圍內局部數組的值。
陣列目的
通過參考
由共享稱為
傳遞
(即,參考通過值傳遞,而不是值本身)。 當您將數組傳遞給方法時,它可以(並且您確實可以)實際修改全局變量。 如果您傳入一個不可變或原始值(例如數字或字符串),情況就不會如此。 在這些情況下,該值實際上是方法范圍的局部值。
您的變量是全局變量這一事實與此無關。 以下面的代碼為例:
function Hello(){
var localArray = [];
Operate(localArray);
// now, localArray has been modified by Operate
}
Hello();
上面,localArray不是全局變量,但是如果直接傳遞數組,它仍然會受到Operate()的影響。
.push
是一個mutator方法,由於對象是通過引用而不是ECMAScript中的值傳遞的,因此它會更改該方法傳遞的數組。 所以第一種方法是正確的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.