TypeError (intermediate value)(…) 不是 JS 中的函数

TypeError (intermediate value)(…) 不是 JS 中的函数

TypeError (intermediate value)(…) is not a function in JS

当我们忘记在函数声明和立即调用的函数表达式之间放置分号时,就会发生“TypeError: (intermediate value)(…) is not a function”错误。

要解决该错误,请在函数声明的右花括号后添加一个分号。

typeerror 中间值不是函数

下面是错误如何发生的示例。

索引.js
// ⛔️ TypeError: (intermediate value)(...) is not a function const logger = function () { console.log('hi'); } // 👈️ missing semicolon here (function () {})();

在右花括号后添加一个分号

要解决该错误,请在函数声明的右花括号后添加一个分号。

索引.js
// ✅ Works const logger = function () { console.log('hi'); }; (function () {})();

我们得到错误是因为下一行立即调用的函数表达式被解释为函数的参数列表logger

在实践中,logger函数以函数作为参数被调用,并且logger函数的返回值被再次调用导致错误。

在发生错误的行的开头添加一个分号

您也可以尝试在发生错误的行的开头放置一个分号。

索引.js
// ✅ Works const logger = function () { console.log('hi'); }; ;(function () {})();

在行首添加分号,有助于 JavaScript 理解这是一个单独的行,不应与上一行合并。

查看您的错误消息以了解错误发生的确切位置

如果您无法发现错误发生的位置,请查看浏览器控制台或终端(如果使用 Node.js)中的错误消息。

typeerror 中间值不是函数

上面的截图显示错误发生在index.jsline 上的文件中21

必须以分号开头的行

JavaScript 解释器会尝试自动添加分号,但在某些情况下它无法做到。

例如,以括号(、方括号[或任何数学运算符开头的行必须以分号开头。

索引.js
// ✅ Works const logger = function () { console.log('hi'); } // 👈️ missing semicolon here ;(function () {})(); // 👈️ line begins with semi colon

这仅适用于前一条语句不以分号结尾的情况。

例如,这是完全有效的语法。

索引.js
const logger = function () { console.log('hi'); }; // 👈️ semicolon here (function () {})(); // 👈️ line doesn't begin with semicolon

前面的语句以分号结尾,因此以括号开头的行不必以分号开头。

如果两个分号都丢失,JavaScript 解释器会假定我们正在尝试调用该函数(使用括号()),将另一个函数作为参数传递给它。

使用super关键字而不是使用this

这是错误如何发生的另一个示例。

索引.js
const obj = { getNum() { return 5; }, sum(a) { // ⛔️ TypeError: (intermediate value).getNum is not a function return a + super.getNum(); }, }; console.log(obj.sum(10));

我们有一个 TypeError 因为我们使用super()关键字而不是使用
this

索引.js
const obj = { getNum() { return 5; }, sum(a) { // ✅ Works return a + this.getNum(); }, }; console.log(obj.sum(10));
该值称为“中间值”,因为调用函数不会产生表达式的最终结果。我们稍后将存储在变量中的值相加以获得最终结果。 getNuma

确保仅在发生错误的行上调用有效函数。

有一组额外的括号,例如sum()()也可能导致错误。