我只是在玩JavaScript和创建构造函数,我看到了这个令人费解的代码。
var foo = function(){
this.x = 1;
return function(){
return this.x;
}
}
var x = new foo();
console.log(x);
为此,我执行了以下操作:
console.log(x); // The given output is expected for this line of code
console.log(x());
console.log(x()());
console.log(x()()());
所有这些都给了我以下相同的输出:
function (){
return this.x;
}
有人能解释一下上面的代码里发生了什么吗。对于这个问题,我不能给出一个恰当的标题。真对不起。
Note:我知道JS中的构造函数。上面的代码只是出于好奇。
发布于 2015-03-30 04:12:00
长话短说--这没什么用。
如果构造函数返回一个对象,那么new
表达式产生的值就是该值,而不是构造的对象。因此,您不是获得foo
的实例,而是得到一个返回this.x
的函数。
看起来,这段代码试图生成一个返回所创建对象的this.x
值的函数,但这不是它要做的。由于您是单独调用x()
,this.x
实际上是指全局 x
变量,因此无论您调用x()()()
多少次,它都只返回自己。
如果您使用了x
以外的任何变量名,并且没有创建一个x
变量(例如y
),那么y()
将只返回undefined
,而y()()
将生成一个ReferenceError。
在严格模式下,这也会很快失败,因为函数中的this
在尝试调用它时将引用undefined
。
发布于 2015-03-30 04:06:55
我的解释是:x包含调用foo()的结果。
foo()返回一个函数:
function(){
return this.x;
}
此函数的主体被写入控制台。
发布于 2015-03-30 04:21:51
下面是前一个答案的一个例子,说明了这一点:
var x = 5;
var foo = function(){
this.x = 1;
return function(){
return this.x;
}
}
var b = new foo();
b() //--> 5
https://stackoverflow.com/questions/29345691
复制相似问题