@dmitriyivvvv

IIFE и область видимости?

Добрый день. Возник следующий вопрос. Получается что при создании IIFE формируется 2е дополнительные области видимости? Пример:
(function foo() {})()
т.е первая область видимости глобальная, затем область видимости в окружающих (), и соответственно в {} ? Потому как, идентификатор
foo будет доступен только в {} , но не в глобальной области видимости. Получается он находится в какой-то промежуточной обл. видимости? Если можно поподробнее объяснить.

И еще вопрос в догонку, допустим у нас есть функциональное выражение
var f = function foo() {};
Так вот foo ведь тоже по сути переменная в которую присваивается значение функции? И какой тут порядок в итоге? Сначало тело функции присваивается в foo, а затем содержимое foo копируется в f? Вопрос мб и глупый, но мне надо прояснить этот момент для себя.
  • Вопрос задан
  • 214 просмотров
Решения вопроса 1
Vlad_IT
@Vlad_IT Куратор тега JavaScript
Front-end разработчик
Мне кажется, нет. т.к. вот это получается выражение (function foo() {}), и области видимости тут не должно быть (тем более, мы говорим о JS, где область видимости не появляется в выражении или фигурных скобках).
Можно написать вот так
var a = function foo() {};
a();

и ничего не изменится. Но вот так написать мы не можем
function foo() { }()
по той причине, что это не выражение, поэтому чтобы ее сразу вызвать, мы создаем выражение при помощи скобок. Это как
{} + [] // 0
({} + []) // [object Object]

В первом случае у нас не получилось выражения, сначала у нас фигурными скобками создается блок, а потом отдельное выражение +[]. А во втором все считалось в выражении, поэтому получился объект + массив. Поэтому даже так заработает
( function foo() {}())
Не думаю, что где-то создается область видимости. т.е. мы имеем их только два - глобальную и в функции.
PS: Если я не прав коллеги, поправьте.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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