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), Кто-то предположил, что использование первой формы вместо второго могло бы иметь значение.
Одним из важных отличий является значение ключевого слова this внутри тела функции, на которую ссылается nextplease.init.
Предположим, что nextplease определено как таковое:
nextplease = {};
nextplease.someCustomProperty = "hello";
nextplease.init = function () { alert(this.someCustomProperty); }
В первом примере значением «this» будет объект DOM, и предупреждение не сработает:
window.addEventListener("load", nextplease.init, false);
Во второй форме значение «this» будет следующим объектом, и в предупреждении будет сказано «привет»:
window.addEventListener("load", function() {nextplease.init();}, false);
См. документацию MDC:
https://developer.mozilla.org/en/DOM/element.addEventListener
Есть 2 возможных отличия
window.addEventListener("load", nextplease.init, false);
Это вызовет функцию и все. Если вы захотите добавить параметры, то их нельзя будет установить.
window.addEventListener("load", function() {nextplease.init();}, false);
Это, с другой стороны, позволяет вам вызывать более одной функции и позволяет вам устанавливать параметры. Это также добавляет дополнительные накладные расходы на вызов функции и сохранение функции в памяти.
Эти два:
window.addEventListener("load", nextplease.init, false);
window.addEventListener("load", function() {nextplease.init();}, false);?
почти точно такие же, предполагая, что nextplease.init
является функцией объект.
Единственное отличие состоит в том, что во втором случае любые аргументы, переданные внешней функции (даже если ее сигнатура ничего не определяет, они все равно могут быть переданы), не будут переданы в nextplease.init ()
. Но поскольку это просто проходит через API addEventListener
, вы знаете, что будет передано заранее.