У меня путаница по поводу IIFE - программирование

У меня путаница по поводу IIFE

Я видел код ниже, который кто-то опубликовал. Я запутался в том, что это регистрирует. Регистрирует переменную a функцию, а не 200. Почему?

var a = 1;
(function a() {
  a = 200;
  console.log(a)
})()
4b9b3361

Ответ 1

Потому что функция, вызываемая сразу, называется, и это имя нельзя переназначить, чтобы ссылаться на что-то еще непосредственно внутри IIFE.

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

Вы можете сделать ошибку явной, если вы используете строгий режим:

'use strict';
var a = 1;
(function a() {
  a = 200;
  console.log(a)
})()

Ответ 2

var a = 1;
(function{
  a = 200;
  console.log(a)
})()

Вместо того, чтобы давать имя функции, дайте анонимную функцию, так как это IIFE, обратитесь к https://developer.mozilla.org/en-US/docs/Glossary/IIFE