Значения функции в JavaScript

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), Кто-то предположил, что использование первой формы вместо второго могло бы иметь значение.

8
задан Community 23 May 2017 в 10:32
поделиться

3 ответа

Одним из важных отличий является значение ключевого слова 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

4
ответ дан 6 December 2019 в 00:06
поделиться

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

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

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

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

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

0
ответ дан 6 December 2019 в 00:06
поделиться

Эти два:

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

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

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

0
ответ дан 6 December 2019 в 00:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: