Самовызывающиеся функции и момент их инициализации [дубликат]

101
11 апреля 2021, 05:30
На этот вопрос уже даны ответы здесь:
Будут ли проблемы если не использовать точку с запятой в javascript? (5 ответов)
Подскажите, почему не происходит вызов самодельного метода? [дубликат] (1 ответ)
Закрыт 1 год назад.

Из-за чего в коде ниже на момент выполнения самовызывающейся функции переменная f не определена? Ведь самовызывающиеся ф-и вроде как не поднимаются вверх по коду, как это происходит с записью аля "function x(){}".

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

Answer 1

Из-за отсутствия ; после } интерпретатор считает приведенный код не двумя независимыми блоками, а одним

let f = (function (){...})(function(){...}())

Таким образом самовызывающаяся функция считается параметром функции, которую присваивают в переменную f. И так как параметры вычисляются до вызова самой функции, выполнение самовызывающейся функции происходит до присвоения f какого либо значения.

Для решения достаточно расставить ; на нужные места:

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

READ ALSO
Получить данные со страницы в виде json

Получить данные со страницы в виде json

Есть страница в которой просто написано в виде json, мне нужно как-то получать каждое из этих чтобы я мог с этим работатькак это реализовать?

88
Приходит пустой post запрос ajax+django

Приходит пустой post запрос ajax+django

После нажатия на кнопку отправляется post запрос:

80