当我在闭包中将 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
我做错了什么?
原文由 armnotstrong 发布,翻译遵循 CC BY-SA 4.0 许可协议
该错误是第三行缺少分号的结果:
ECMAScript 规范 对自动插入分号有特定的规则,但是在这种情况下不会自动插入分号,因为从下一行开始的带括号的表达式可以解释为函数调用的参数列表。
这意味着如果没有该分号,匿名
window.Glog
函数将被调用,并使用一个函数作为msg
参数,然后是(window)
,它随后试图调用返回的任何内容。这就是代码的解释方式: