0

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

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

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

    return thing;
};

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

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

4

1 回答 1

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.

于 2013-07-06T04:37:33.217 回答