Почему я не могу использовать «это» внутри внутренней функции? - PullRequest
0 голосов
/ 19 ноября 2011

Я новичок в JavaScript.У меня работает следующий скрипт:

var navRef = this.navigator;
function onSearch( templateName) {
    navRef.onSearch();
}

, но не тот, что ниже, и я пытаюсь понять, почему?Любая помощь приветствуется.(навигатор передается в качестве аргумента этому объекту).

function onSearch( templateName) {
    this.navigator.onSearch();
}

Ответы [ 4 ]

0 голосов
/ 19 ноября 2011

Javascript имеет лексическую область видимости, поэтому переменные (например, navRef) могут использоваться внутри внутренних функций

var navRef = this.navigator;
function onSearch(){
    navRef.onShow();
}

переменная this, однако, является злым исключением . Каждая функция получает свой собственный this (и значение, которое она имеет , зависит от того, как функция была вызвана ), поэтому, если вы хотите получить доступ к внешнему this (или одному из его свойств), вам нужно использовать промежуточная переменная:

var that = this;
function onSearch(){
    that.navigator.onSearch();
}
0 голосов
/ 19 ноября 2011

'this' указывает на разные объекты в обоих случаях. В первом случае «это», скорее всего, относится к объекту Windows, в котором навигатор является свойством. Во втором случае «это», скорее всего, относится к любому объекту, вызвавшему функцию. Трудно быть точным, так как вы не дали контекст. Но этого должно быть достаточно, чтобы понять, что происходит.

0 голосов
/ 19 ноября 2011

Вы должны прочитать о областях JavaScript .В первом примере «this» ссылается на текущую область (которая имеет свойство навигатора).Во втором примере 'this' фактически ссылается на текущую область действия функции, в которой он находится.

0 голосов
/ 19 ноября 2011

Вы можете проверить эту статью по ключевому слову this. По сути, this используется внутри функции для ссылки на контекст, в котором эта функция выполняется. Когда рассматриваемая функция вызывается как метод объекта, this ссылается на этот объект. Когда функция вызывается в глобальной области и не имеет экземпляра для ссылки, this ссылается на объект window.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...