Я видел код ниже, который кто-то опубликовал. Я запутался в том, что это регистрирует. Регистрирует переменную a функцию, а не 200. Почему?
var a = 1;
(function a() {
a = 200;
console.log(a)
})()
Ответ 1
Потому что функция, вызываемая сразу, называется, и это имя нельзя переназначить, чтобы ссылаться на что-то еще непосредственно внутри IIFE.
Любые выражения именованных функций также будут демонстрировать это поведение. Функция выражение, функция называется будет означать, что непосредственно внутри функции всегда будет относиться к самой функции, даже если вы пытаетесь передать его. aa
Вы можете сделать ошибку явной, если вы используете строгий режим:
'use strict';
var a = 1;
(function a() {
a = 200;
console.log(a)
})()
Ответ 2
var a = 1;
(function{
a = 200;
console.log(a)
})()