这是代码
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]
不是函数
答案 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);
})();
})();