函数中声明的var是否在多个函数调用中持续存在?

时间:2015-11-14 01:56:47

标签: javascript

我想在每次函数调用时创建一个新变量,并将这个新变量推送到全局数组。

globalArr = [];

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

Javascript的Array.prototype.push方法会将对newObj的引用附加到globalArr

我是否会为每次调用addObj()创建唯一对象?我想但是我不完全确定newObj不会在多个电话中持续存在。我想确保每次拨打newObj时都不会推送相同的addObj

我考虑过如下解决方案,但不确定是否有必要:

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

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

也许我说的问题甚至不存在?

1 个答案:

答案 0 :(得分:3)

var newObj = {id: objId};

这一行将保证每次都有一个指向不同内存地址的新对象。 open和close花括号初始化一个新对象。所以这部分实际上是:

var newObj = {};

所以是的,每次调用函数时将该值推入全局数组将为您提供X个新对象,其中X是您调用函数的次数。它不会引用同一个对象。正如你所说,第二个代码示例并不是实现你想要的。

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