1

对于以下代码

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

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

谢谢,

4

6 回答 6

4

看到 d 现在等于一个 FUNCTION,“this”将被评估为任何调用它的函数。它实际上还没有被评估。

在执行结束时,d='function e() { return this; }', 所以你执行的时刻d()就是this评估的时间。

于 2012-05-02T04:18:37.053 回答
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

于 2012-05-02T04:29:32.420 回答
0

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

然而,这两个都是真的:

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

也就是说,this它由作为第一个参数传入的内容定义call

于 2012-05-02T04:26:11.710 回答
0

this是对调用方法的对象的引用。 d()类似window.d()(如果没有with说明)

于 2012-05-02T11:10:38.017 回答
0

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

查看申请致电

如果您知道 python,this就像self,但没有明确编写并且始终存在

于 2012-05-02T04:22:26.210 回答
0

这通常是函数的调用者

$('.image').each(function(index){
    alert($(this).attr('href'));
}

我认为 ab() 会返回一个

http://remysharp.com/2007/04/12/jquerys-this-demystified/

于 2012-05-02T04:22:40.993 回答