当前位置: 首页 > 知识库问答 >
问题:

未捕获类型错误:(中间值)(…)这不是一个函数

令狐增
2023-03-14

当我将js逻辑作为单个js文件编写在闭包中时,一切正常,如下所示:

(function(win){
   //main logic here
   win.expose1 = ....
   win.expose2 = ....
})(window)

但是当我尝试在同一个js文件中的闭包之前插入一个日志替代函数时,

 window.Glog = function(msg){
     console.log(msg)
 }
 // this was added before the main closure.

 (function(win){
   //the former closure that contains the main javascript logic;
 })(window)

它抱怨存在类型错误:

Uncaught TypeError: (intermediate value)(...) is not a function

我做错了什么?

共有3个答案

萧献
2023-03-14

错误案例:

var userListQuery = {
    userId: {
        $in: result
    },
    "isCameraAdded": true
}

( cameraInfo.findtext != "" ) ? searchQuery : userListQuery;

输出:

TypeError: (intermediate value)(intermediate value) is not a function

修正:您缺少一个分号(;)分开表达

userListQuery = {
    userId: {
        $in: result
    },
    "isCameraAdded": true
}; // Without a semi colon, the error is produced

( cameraInfo.findtext != "" ) ? searchQuery : userListQuery;
柴磊
2023-03-14

[,'或任何算术运算符开头的每一行,如果您希望它被解释为自己的行,则必须以分号开头~否则,它可能会意外地与前一行结合。所有其他换行符都有隐式分号。

就这样。完成。

  • 请注意, /, , - 是您无论如何都要执行此操作的唯一有效运算符。你永远不会希望一行以*开头,因为它是一个二进制运算符,在一行的开头永远没有意义。

考虑以下事项:

func()
;[0].concat(myarr).forEach(func)
;(myarr).forEach(func)
;`hello`.forEach(func)
;/hello/.exec(str)
;+0
;-0

遵循上述规则可防止将上述解释为

func()[0].concat(myarr).forEach(func)(myarr).forEach(func)`hello`.forEach(func)/hello/.forEach(func)+0-0

提到将会发生什么:括号将索引,括号将被视为函数参数。反勾号将转换为带标记的模板,正则表达式将转换为除法,显式/带符号的整数将转换为加减运算符。

当然,您可以通过在每个换行符的末尾添加分号来避免这种情况,但不要认为这样做可以让您像C程序员一样编写代码。因为当您不以分号结束一行时,Javascript可能会根据您的意愿隐式添加一个分号。所以,请记住以下语句

return       // Implicit semicolon, will return undefined.
    (1+2);

i        // Implicit semicolon on this line
   ++;   // But, if you really intended "i++;"
         // and you wrote it like this,
         // you need help.

上述情况会发生返回/继续/中断/ /--.任何linter都会用死代码或 /--语法错误来捕获这一点 ( /-- 永远不会实际发生)。

最后,如果您希望文件连接工作,请确保每个文件以分号结尾。如果您使用的是bundler程序(推荐使用),它应该会自动执行此操作。

孟修竹
2023-03-14

错误是第三行缺少分号的结果:

window.Glog = function(msg) {
  console.log(msg);
}; // <--- Add this semicolon

(function(win) {
  // ...
})(window);

ECMAScript规范有自动插入分号的特定规则,但是在这种情况下分号不会自动插入,因为从下一行开始的括号表达式可以被解释为函数调用的参数列表。

这意味着如果没有分号,匿名窗口将关闭。Glog函数被调用时,函数作为msg参数,后跟(窗口),随后尝试调用返回的任何内容。

以下是代码的解释方式:

window.Glog = function(msg) {
  console.log(msg);
}(function(win) {
  // ...
})(window);
 类似资料:
  • 在我的redux js应用程序(google appengine后端)中,当打开包含根组件的页面时,我会收到以下警告和错误消息。 警告:失败的proType:无效的prop类型的提供给,预期的。检查的渲染方法。bundle.js:6169 警告:propType失败:提供给的类型的无效,应为。检查的渲染方法。捆js:6169 警告:失败的上下文类型:类型的无效子上下文提供给,预期的。检查的渲染方法

  • 无法理解为什么在尝试实现此角度代码时会出现TypeError。它在类({constructor:function(){}})周围生成错误。不确定原因。谢谢你的帮助

  • store.js index.js 文件夹src compose index.js和store.js 显示消息未捕获类型错误:(0,_store.configureStore)在F12时不是函数 帮帮我谢谢

  • 我试图在setTimeout之后进行状态更改以更改类名,但是,我总是得到一个“aboutheader.jsx:21 uncathed typeerror:this.setstate不是一个函数”。从“React”导入React; require('../../stylesheets/component/aboutheader.scss'); timeDelay(){setTimeout(函数upd

  • 我的代码: external.js: 不幸的是,当我包含外部脚本时,出现以下错误: 错误:$不是一个函数 我该怎么解决这个问题?请记住,我不能编辑外部Javascript文件,因为它是第三方的。

  • 因此,我想使用Apollo客户端react钩子“usequery”查询运行Apollo服务器的graphql后端。 但是定义的查询常量将返回一个错误,它是:uncatched typeerror:(...)不是函数,因此页面根本不呈现。 我的ApolloClient和提供程序设置如下: 当加载应用程序时,它会给我上面提到的错误。我在2小时内跟踪了我能找到的每一个教程,googeling和YouTu