Какво не е.

this не е текущият обхват. this не е указател към текущата функция. Това са популярни погрешни схващания.

Какво е това

Когато се извика функция, JavaScript определя какво this ще бъде вътре в тази функция. За да разберете това, погледнете къде е извикана функцията. След това преминете през белодробното „никога не яжте незаконни наркотици“, за да разберете какво ще бъде this въз основа на този сайт за обаждания:

Никога

N означава „ново“ обвързване.

Извикването на функцията беше ли продължено от новата ключова дума (напр. new Foo())? Ако е така, JavaScript ще създаде нов, празен обект (т.е. { } ) и ще го зададе като стойност на this.

Яжте

E означава „изрично“ обвързване.

Беше ли извикана функцията с bind(), call() или apply()? Ако е така, JavaScript ще зададе първия аргумент, предаден на тези функции, като стойността на this. Например foo.call(bar) изрично задава стойността на this в рамките на foo до bar.

Незаконен

I означава „имплицитно“ обвързване.

Беше ли извикана функцията като препратка към свойство на обект? Ако е така, JavaScript задава стойността на this на този обект. Например:

obj = {
  a: '1',
  foo: function() { return this.a }
};
obj.foo() // 1

Наркотици

D означава „обвързване по подразбиране“.

Нито едно от другите три правила не се прилага, т.е. голо извикване на функция (напр. foo() )? Ако е така, JavaScript задава по подразбиране стойността на this за глобалния обхват, който е window в браузъра. В строг режим JavaScript вместо това задава стойността от this на undefined.