什么时候评估“这个”?

时间:2012-05-02 04:12:38

标签: javascript this

以下代码

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

d()的价值是多少?这可能不是一个很好的例子,但我只是对这个"这个"将参考。

谢谢,

6 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

从您的代码中,d与“this”不同。 d将是函数e,因为你将d设置为函数调用的返回值a.b()返回一个函数,所以

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

答案 2 :(得分:0)

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

请参阅applycall

如果您了解python,this就像self一样,但没有明确写出并始终在那里

答案 3 :(得分:0)

这通常是函数的调用者

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

我认为a.b()会返回

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

答案 4 :(得分:0)

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

然而,这两件事都是真的:

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

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

答案 5 :(得分:0)

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