1

我在下面有这段代码:

this.color = "red";
var o = {color: "blue"};
function sayColor() {
  console.log(this.color);
}
sayColor();
sayColor.call(this);
sayColor.call(o);

@吉姆·德维尔,

以下是新发现:

  1. 当我在浏览器中运行该代码片段时:它连续输出"red, red, blue" 。
  2. 当我直接在节点终端中运行它时:它还会连续输出"red, red, blue" 。
  3. 但是当我将该代码保存为文件 functionTypeThisExample.js 并node functionTypeThisExample.js在终端中执行时,它会输出"undefined, red, blue"

所以我的问题是在最后一种情况下会发生什么?

4

1 回答 1

2

thisthis在节点中与在 JS中没有什么不同。它是表示当前上下文的对象。

this.color = "red";

在这里,这是全局对象

var o = {color: "blue"};
function sayColor() {
  console.log(this.color);
}

sayColor();

在这种情况下,这仍然是全局对象

sayColor.call(this);

这是全局对象,但通过调用应用,而不是“默认”

sayColor.call(o);

这是o

但是,当我在节点(OS X 上为 0.6.18)中运行它时,我会像在浏览器中一样得到“红、红、蓝”。

于 2012-06-02T04:07:58.020 回答