我有一个关于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”函数基本上有两个副本,或者对象是否引用了相同的函数但是使用不同的闭包调用?
答案 0 :(得分:5)
有两个副本,每次调用makesomething()
时都会创建一个副本。
您会注意到x1.do === x2.do
是false
。
如果你这样做:
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
。