使用IIFE时会引发“ TypeError`:[0,1]不是函数”

时间:2018-08-30 08:48:56

标签: javascript arrays function iife

这是代码

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 :(得分:2)

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中的每条语句之后始终使用分号(;)总是一个好习惯。

答案 1 :(得分:1)

这是一个有效的代码段

const numberArray = [0, 1];

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

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

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

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


如果您在;之后删除numberArray,这就是您遇到的问题。您还必须对内部声明的functions使用IIFE。

const numberArray = [0, 1]

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

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

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

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