Подтвердить что ты не робот

"Uncaught TypeError: undefined не является функцией" в кодовом блоке JavaScript

У меня есть код кода JavaScript, как показано ниже на моей странице html. Когда я запускаю это, загружая страницу. Я получаю ниже вывода на моей консоли браузера.

outer world 
Uncaught TypeError: undefined is not a function

Как вы можете видеть в фрагменте кода, я не выполняю функцию с именем b в любом месте кода. Но при запуске кода выход из этой функции идет вместе с undefined is not a function error, который я не мог найти где-либо в моем блоке кода.

Чтобы добавить к этому сценарию больше, нет никаких журналов, когда я удаляю одну из частей кода. то есть. Если я удалю b инициализацию из кода, то ошибок и вывода не будет. Кроме того, если я удаляю функциональный блок самоисполнения, нет журналов или ошибок. Его правда, что в строке инициализации b отсутствует точка с запятой. но то, что соблазняет его предоставить такой результат, смущает меня. Не могли бы вы помочь мне выяснить причины такого поведения?

Не могли бы вы помочь мне понять, почему это происходит?

var b = function() {
  console.log('outer world');
}

(function() { 

})();
4b9b3361

Ответ 1

Пропустил ; после объявления b. Следующий код эквивалентен тому, что у вас есть.

var b = function() {
   console.log ('outer world');
}(function() {})();

Без ; b становится самоисполняющимся и принимает пустую функцию в качестве параметра. После этого он снова выполняется самостоятельно; однако, поскольку b не возвращает функцию, вы получаете исключение.

Я предлагаю не пропускать ; пока вы не станете JS ниндзя :). Держите b внутри, чтобы избежать загрязнения окружающей среды.

(function () {
    "use strict";

    var b = function () {
        console.log("hi");
    };
    // other code
}());

Обсуждение авто-вставки точки с запятой

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

var b = function () { console.log('outer world') }
;(function() { /* ... */ }())

Обновление ES6:

(() => {
  const b = () => console.log('hi')
  // ...
})()

Ответ 2

Вам понадобится точка с запятой после объявления var, и, кстати, удалите пробел между журналом и (

var b = function() {
       console.log('outer world');
};