2012-05-02 43 views
1

对于下面的代码段什么时候评估“this”?

a.b = function c(){ 
    return function e(){ 
     return this; 
    }; 
}; 
d = a.b(); 

什么将d的值()是什么?这可能不是一个很好的例子,但我只是对“this”会引用什么感到困惑。

感谢,

+1

您可以尝试做console.log(this);函数内部 –

+0

我的投票将是“执行时间”。 – aroth

+0

这个问题几乎被问及如何用正则表达式解析HTML(lol)。 http://stackoverflow.com/questions/3320677/this-operator-in-javascript – Marty

回答

4

眼见为d将现在等于一个功能“这”将被计算到任何函数调用它。它尚未实际评估过。

在执行结束时,d='function e() { return this; }',所以您执行d()的那一刻是this将被评估。

+2

但是在这种情况下''this'将在'd()'被调用时被评估为'window'。 – bfavaretto

+0

确切地说,当'd()'最终被评估,但你是对的。之所以如此,是因为不是对象的子对象的所有东西都是窗口的子对象,所以将'd()'想象为'window.d()',因此它指向窗口。 – DanRedux

0

this是所有函数的隐式参数。

applycall

如果你知道蟒蛇,this就像是self,但没有明确的书面和永远存在

0

假设d()在您的代码段d()的最后一行将返回全局对象window后立即被调用(如果您在浏览器中)。

但是两者都是正确的:

d.call(a) === a; 
d.call(a.b.prototype) === a.b.prototype; 

这是说,this是由什么传递作为第一个参数call定义。

1

从你的代码d不同于“this”。 d将是一个函数E,因为你设置d是函数调用AB()返回一个函数的返回值,所以

d = function e(){ 
    return this; 
} 

现在的this值取决于你如何调用这个函数d 。当调用此函数时,将评估this。如果你只是称之为d()this将是全球Window对象。

,并让说,如果我有

obj ={foo:1, bar:2}; 

和我这样调用

d.call(obj) 

this将obj对象。 call()方法用于在任何对象上调用函数,传递的对象在该函数内的行为如this

我知道Javascript这真的很让人困惑,并且不容易让你的头在附近。 可能是这可以帮助http://devlicio.us/blogs/sergio_pereira/archive/2009/02/09/javascript-5-ways-to-call-a-function.aspx

0

this是对调用方法的对象的引用。 (如果没有with指令)

相关问题