Значения функций в JavaScript - PullRequest
8 голосов
/ 23 февраля 2010

nextplease.init = function() {...} - это функция без аргументов. Я бы ожидал nextplease.init и function() {nextplease.init();} вести себя одинаково. Есть ли какая-либо разница между ними (очевидно, вы можете назначить что-то для nextplease.init, но давайте исключим это)? В частности, может ли быть разница в поведении между window.addEventListener("load", nextplease.init, false); и window.addEventListener("load", function() {nextplease.init();}, false);?

Ошибка, которую я пытаюсь найти, описана в Объекты в JavaScript, определенные и неопределенные одновременно (в расширении FireFox) Кто-то предположил, что использование первой формы вместо второй может сделать разница.

Ответы [ 3 ]

4 голосов
/ 23 февраля 2010

Одним из важных отличий является значение ключевого слова this в теле функции, на которую ссылается nextplease.init.

Предположим, что nextplease определено так:

nextplease = {};
nextplease.someCustomProperty = "hello";
nextplease.init = function () { alert(this.someCustomProperty); }

В первом примере значением "this" будет объект DOM, и предупреждение будет завершено:

window.addEventListener("load", nextplease.init, false);     

Во второй форме значением «this» будет объект nextplease, и в предупреждении будет указано «hello»:

window.addEventListener("load", function() {nextplease.init();}, false);

Ссылка на документацию MDC:

https://developer.mozilla.org/en/DOM/element.addEventListener

0 голосов
/ 23 февраля 2010

Эти два:

window.addEventListener("load", nextplease.init, false); 
window.addEventListener("load", function() {nextplease.init();}, false);?

равны почти точно так же, при условии nextplease.init является функциональным объектом.

Единственное отличие состоит в том, что во втором случае любые аргументы, передаваемые внешней функции (хотя ее сигнатура не определяет их, они все же могут быть переданы) не будут переданы nextplease.init(). Но так как это происходит только через addEventListener API, вы знаете, что будет передано раньше.

0 голосов
/ 23 февраля 2010

Есть 2 возможных различия

window.addEventListener("load", nextplease.init, false);

Это вызовет функцию, и это все. Если вы хотите добавить параметры, то вы не сможете их установить.

window.addEventListener("load", function() {nextplease.init();}, false);

С другой стороны, это позволяет вам вызывать более одной функции и устанавливать параметры. Это также добавляет дополнительные издержки на вызов функции и сохранение функции в памяти.

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