Javascript变量生命周期,返回时是否会复制变量?

时间:2013-03-30 03:20:49

标签: javascript function

没有代码很难描述情况。 我的修改使得一些答案无关紧要。我在这里通过原始代码和简化版本:

function Entity(){
  var value = {};

  return {
    'value': value
  };
}

var e1 = Entity();
var e2 = Entity();
alert(e1.value === e2.value);

我认为它应该回归真实。但事实上,它返回false。从函数Entity返回时,'value'是否被复制?

更新 我想我现在知道原因了。每次实体函数被称为表达式“var value = {};”将生成一个新的对象。谢谢。

3 个答案:

答案 0 :(得分:1)

返回时不会复制

值,但只要运行实体函数,就会创建一个新的对象。

您可以使用简单的代码(如

)观察“新对象”的创建
console.log({} === {}) //should give false

var a = {};
console.log(a === a); //should give true

你可以通过在运行函数时分配更多变量来检查在返回时没有复制的东西

var a,b,c;

function Entity(){
   var value = {};
   a = value;
   b = value;
   return value;
}

c = Entity();

console.log(a==b, a==c, b==c); //should all give true

答案 1 :(得分:0)

[elements...]语法创建一个新数组。 在javascript中,===运算符按引用(而不是内容)比较数组,因此结果为false

答案 2 :(得分:0)

您的函数当前正在每次调用时创建一个新对象。

保持与示例相同的界面,以共享相同的数组,您可以执行以下操作 - >

Entity = (function () {
    //this variable is accessible only in the scope of this function
    var messageBoxes = ['hello'];

    //we return a function that return an object that will make the private messageBoxes variable accessible through it's messageBoxes property.
    return function () {
        return { messageBoxes: messageBoxes };
    };
})(); //note that this function will be self-executing


alert(Entity().messageBoxes === Entity().messageBoxes);

但是,您不会在此处获得任何内容,因为您可以直接公开访问私有messageBoxes变量。