Почему в Apple Safari Developer Library они используют анонимные функции при присоединении eventsListeners? - PullRequest
2 голосов
/ 29 апреля 2011

Все,

Я довольно новичок в разработке JavaScript, так что это, вероятно, очень глупый вопрос.

Но я читаю Apple Safari Developer Library и замечаю, чтоони используют «анонимные функции» при подключении к EventListener:

this.element.addEventListener('touchstart', function(e) { return self.onTouchStart(e) }, false);

Это отличается от этого:

this.element.addEventListener('touchstart', onTouchStart, false);

Предполагается, что это другое, как?Если это не так, почему они используют этот метод?

Вот ссылка на документ, на который я ссылаюсь:

Руководство разработчика Safari - Интерактивные визуальные эффекты

Некоторые пояснения ...

Я бы понял пользу этого:

this.element.addEventListener('touchstart', function(e) { alert("touched")}, false);

За это ...

this.element.addEventListener('touchstart', onTouchStart, false);
function onTouchStart(e) {
    alert("touched");
}

В этом случае,вы сохранили, создав «постоянную» именованную функцию.

Но, в случае Apple, функция с именем «onTouchStart» в любом случае является постоянной именованной функцией.Итак, есть ли еще выгода?

Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 29 апреля 2011

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

0 голосов
/ 29 апреля 2011

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

function onTouchStart(e) {
    return self.onTouchStart(e);
}
this.element.addEventListener('touchstart', onTouchStart, false);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...