2015-11-14 31 views
0

我想在每個函數調用中創建一個新變量,並將這個新變量推送到一個全局數組中。在函數中聲明的var在多個函數調用中是否存在?

globalArr = []; 

function addObj(objId){ 
    var newObj = {id: objId}; 
    globalArr.push(newObj); 
} 

JavaScript的Array.prototype.push方法來newObj參考追加到globalArr

我是否會爲每次致電addObj()創建獨特的對象?我認爲,但我不完全確定newObj將不會持續多次通話。我想確保每次撥打addObj時我都不會推薦相同的newObj

我已經考慮過類似下面的解決辦法,但我不知道這是否是必要的:

function addObj(objId){ 
      var newObj = new anObject(objId); 
      globalArr.push(newObj); 
    } 

    function anObject(objId){ 
     this.id = objId; 
    } 

也許我講的問題根本不存在?

+1

每當您調用* addObj *時,全新的執行上下文都會與局部變量* newObj *的全新實例一起創建。被推入* globalArr *的是對分配給* newObj *的對象的引用。無論發生什麼* newObj *變量之後都無關緊要。 – RobG

回答

3
var newObj = {id: objId}; 

這條線會保證你的一個新對象每次都指向一個不同的內存地址。打開和關閉的花括號初始化一個新對象。因此,這部分實際上:

var newObj = {}; 

所以,是的,每個函數被調用會給你新的對象的X個,其中X爲你調用的函數次數時間推該值成一個全球性的陣列。它不會引用同一個對象。正如你所說,代碼的第二個例子不是實現你想要的。

要回答這個問題的標題,一個函數中聲明的變量不會持續多個函數調用。它是一個本地範圍的變量,每次調用該函數時都會重新實例化。

相關問題