«TypeError`:` [0,1] `не является функцией» выбрасывается при использовании IIFE - PullRequest
0 голосов
/ 30 августа 2018

Вот код

var numberArray = [0, 1]

(function() {
  numberArray.push(2)

  function nestedFunction() {
    numberArray.push(3)

    function anotherNestedFunction() {
      numberArray.push(4)
    }

    console.log(numberArray)
  }
})()

Я ожидаю numberArray со значением [0,1,2,3,4], но выдает эту ошибку:

TypeError: [0,1] не является функцией

Ответы [ 2 ]

0 голосов
/ 30 августа 2018
var numberArray = [0, 1]
(function() {

эквивалентно

var numberArray = [0, 1] (function() {

Вот где возникает ошибка.

Чтобы решить проблему, поместите ; после объявления массива, который механизм JavaScript будет рассматривать обе строки как отдельное утверждение:

var numberArray = [0, 1];

(function() {
  numberArray.push(2);

  function nestedFunction() {
    numberArray.push(3);

    function anotherNestedFunction() {
      numberArray.push(4);
    }
    
    anotherNestedFunction();
    console.log(numberArray);
  }
  nestedFunction();
})();

Чтобы игнорировать все эти неожиданные проблемы, всегда полезно использовать точки с запятой (;) после каждого оператора в JavaScript.

0 голосов
/ 30 августа 2018

Вот рабочий фрагмент

const numberArray = [0, 1];

(function() {
  numberArray.push(2);

  (function nestedFunction() {
    numberArray.push(3);

    (function anotherNestedFunction() {
      numberArray.push(4);
    })();

    console.log(numberArray);
  })();
})();

Если вы уберете ; после numberArray, у вас возникнет проблема. Вы также должны использовать IIFE со своим внутренним объявленным functions.

const numberArray = [0, 1]

(function() {
  numberArray.push(2);

  (function nestedFunction() {
    numberArray.push(3);

    (function anotherNestedFunction() {
      numberArray.push(4);
    })();

    console.log(numberArray);
  })();
})();
...