当我在闭包中将 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
我做错了什么?
该错误是由于第三行缺少分号而导致的:
window.Glog = function(msg) {
console.log(msg);
}; // <--- Add this semicolon
(function(win) {
// ...
})(window);
ECMAScript 规范有自动分号插入的具体规则,但是在这种情况下,不会自动插入分号,因为下一行开始的括号表达式可以解释为函数调用的参数列表。
这意味着如果没有分号,匿名者window.Glog
函数被调用为msg
参数,后面跟着(window)
随后尝试调用返回的任何内容。
这就是代码的解释方式:
window.Glog = function(msg) {
console.log(msg);
}(function(win) {
// ...
})(window);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)