2012-02-28 4 views
0

http://jsfiddle.net/raylu/C6Tkn/Почему контекст изменяется в этом фрагменте JS?

function a() { 
    document.write(this + '<br />'); 
} 

a(); 
a.apply('hello'); 

var b = function() { 
    a(); 
} 
b.apply('hi');​ 

Я ожидал бы последнюю строку на выходе «привет», но вместо этого он выводит окно.

+0

[У MDN есть хорошая страница о 'this'] (https://developer.mozilla.org/en/JavaScript/Reference/Operators/this). Всякий раз, когда вы вызываете функцию типа 'func();', 'this' будет ссылаться на глобальный объект. –

+0

Возможный дубликат [Почему это происходит при передаче аргумента функции как строки или ссылки?] (Http://stackoverflow.com/questions/5883619/why-does-this-change-when-passing-the-function -argument-а-строка или ссылка) – PeeHaa

ответ

0

В этом контексте this должен быть window.

b() «s this является 'hi', но не наследуется/связан с какой-либо функции вызывает в теле функции b(). Вот почему внутри a() при вызове через b() с обычным способом вызова функции (()) - window.

Смежные вопросы