javascript - 未捕获的 TypeError : (intermediate value)(. ..) 不是函数

标签 javascript typeerror

当我在闭包中将 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)

它提示有一个TypeError:
Uncaught TypeError: (intermediate value)(...) is not a function

我做错了什么?

最佳答案

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

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

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

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

这意味着没有那个分号,匿名 window.Glog函数被调用,函数为 msg参数,后跟 (window)它随后试图调用返回的任何内容。

这就是代码的解释方式:
window.Glog = function(msg) {
  console.log(msg);
}(function(win) {
  // ...
})(window);

关于javascript - 未捕获的 TypeError : (intermediate value)(. ..) 不是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62701915/

相关文章:

javascript - 滚动经过特定 div 时更改菜单颜色

python - 模块 'lxml.etree' 的 RuntimeWarning : compiletime version 2. 6 与运行时版本 2.7 不匹配

javascript - 根据值在 cytoscape.js 中动态放置节点,避免重叠

javascript - ScrollTop 在 Firefox 中不起作用

javascript - ReactJS 高阶组件不在渲染循环中转发属性

python - 面试题: find the direction of first step

python - 如何正确使用 cv2.DrawMarker 函数?

javascript - 自动完成,永恒的故事

javascript - 如何使用 JavaScript 对 API 对象使用迭代器进行迭代?

python - 类型错误:必须使用 'method name' 实例作为第一个参数调用未绑定(bind)方法 'class name'(改为使用 str 实例)