Javascript函数副本

时间:2013-07-06 04:34:20

标签: javascript function

我有一个关于javascript如何在内部存储函数的问题。 鉴于此代码:

var makesomething = function (x) {
    var thing = {
        x: x 
    };

    thing.do = function () {
        this.x++;
    };

    return thing;
};

var x1 = makesomething(1);
var x2 = makesomething(2);

由于我调用了makeomething函数两次,这是否意味着“do”函数基本上有两个副本,或者对象是否引用了相同的函数但是使用不同的闭包调用?

1 个答案:

答案 0 :(得分:5)

有两个副本,每次调用makesomething()时都会创建一个副本。

您会注意到x1.do === x2.dofalse

如果你这样做:

var doIt = function() {
    this.x++;
};
var makesomething = function (x) {
    var thing = {
        x: x 
    };

    thing.do = doIt;

    return thing;
};

var x1 = makesomething(1);
var x2 = makesomething(2);

然后两者都引用相同的功能,而x1.do === x2.do将是true