2

当以不同方式调用/返回函数时,我发现代码的不同行为。这很令人困惑。因此,为了消除我的疑虑,我将整个代码精简到最少:

让我们考虑一个简单的函数:

function f()
{
   //some code
}

var objf = f();

Q1。现在objf是未定义的。为什么?f()回报是什么?

function f()
{
   //some code
   return this;
}

var objf = f(); 

Q2。f()回报是什么?全局对象?

4

3 回答 3

3

Q1。javascript 中的函数总是返回值。默认值为undefined,但构造函数除外,其默认返回值为this。由于在 Q1 示例中未指定返回值,因此解释器返回默认值undefined.

Q2。 this是一个 javascript 关键字,由解释器根据应用程序上下文进行更新。在没有从对象调用的函数的情况下,如您的 Q2 示例中,this将引用全局对象。

“this”关键字是如何工作的?

于 2013-05-26T17:38:15.070 回答
2

当你这样做...

function f()
{
   //some code
}

var objf = f();

...一旦没有“return something”语句,您将获得“f”函数的返回值,在这种情况下它是未定义的。

如果你这样做...

function f()
{
   //some code
}

var objf = new f();

...您将基于“f”函数原型实例化一个新对象。即使您的“f”函数为空,您的 objf 变量也会收到一个新的对象引用。

而这样做...

function f()
{
   //some code
   return this;
}

var objf = f(); 

...在您的情况下,“this”将是全局对象,即浏览器的窗口对象。this 键是对函数绑定的对象的引用,看这个:

someobj = {
  f:function(){
    return this;
  }
}

var objf = someobj.f();

objf === someobj; //==>true!!!
于 2013-05-26T17:49:01.953 回答
0

在第一种情况下,objf确实是未定义的。由于该函数不返回任何内容,因此仅仅发明一些东西并返回它是不明智的。

在第二种情况下,objf将是Window对象。

于 2013-05-26T17:32:30.947 回答