2015-11-14 117 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为你调用的函数次数时间推该值成一个全球性的阵列。它不会引用同一个对象。正如你所说,代码的第二个例子不是实现你想要的。

要回答这个问题的标题,一个函数中声明的变量不会持续多个函数调用。它是一个本地范围的变量,每次调用该函数时都会重新实例化。