函数调用和关键字“this”之间有什么关系?

时间:2014-02-26 16:19:11

标签: javascript function scope this invocation

我对JavaScript很陌生,我刚开始使用.apply()和其他使用关键字this的方法,我可以说this有事情可做使用调用函数的上下文,但我真的想了解this究竟是指什么。

特定函数调用与this之间的关系看起来类似于对象与属性/方法之间的关系。

这两种关系究竟是否相关?

2 个答案:

答案 0 :(得分:1)

根据ECMAScript Language Specification Section 11.1.1,答案是

  

this关键字的计算结果为当前执行上下文的ThisBinding值。

答案 1 :(得分:1)

以下是您可以考虑的三种情况。这些都没有正式描述,而是简单直观:

默认上下文

如果你没有指定上下文并调用函数(不是方法),this将是全局对象:

function foo() {
  console.log(this); //window
}

隐式设置上下文

如果你调用一个函数,那就是给定对象this的方法将是最后一个点之前的对象:

function foo() {
  console.log(this);
}

var bar = {};
bar.foo = foo;
bar.foo(); //bar
bar.baz = {};
bar.baz.foobar = foo;
bar.baz.foobar(); //bar.baz

明确设置上下文

您可以使用callapplybind更改上下文:

function foo() {
  console.log(this);
}

foo.call(1); //1
foo.call(window); //window

var bar = {};
bar.foo = foo;
bar.foo.apply(42); //42