IIFE запустить объявление функции и выражение функции с другим результатом - PullRequest
0 голосов
/ 20 сентября 2019

Я пытаюсь использовать выражение немедленного вызова функции для запуска другой функции.Если я использую FE, получается ошибка

let f = function(x) {
  alert(x)
}

(function() {
  f(1)
}())
// ReferenceError: Cannot access 'f' before initialization

При использовании FD все работает:

function f(x) {
  alert(x)
}

(function() {
  f(1)
}())
// 1

Что происходит внутри?

1 Ответ

1 голос
/ 20 сентября 2019

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

Вы никогда не заканчиваете объявление переменной, содержащее выражение функции , ;, поэтому следующие скобки являются вызовом функции:

 let f = function() { /*...*/ }(/*...*/)(/*...*/);

TLDR: Always endоператоры с точкой с запятой.

 let f = function() { /*...*/ }; // <<<
...