我有两个自我调用函数,但我收到错误
Uncaught TypeError: undefined is not a function
码
(function(){ //a.min.js
console.log('main')
})()
(function(){ //b.min.js
console.log('two')
})()
谢谢大家的解决方案,但我想知道如果通过gulp等一些自动化工具完成连接和缩小,如何解决这个问题
答案 0 :(得分:4)
你忘记了分号
(function(){
console.log('main')
})();
(function(){
console.log('two')
})();
使第一个IIFE解释为未关闭,第二个代码块产生错误,因为它被解释为第一个IIFE的参数。
答案 1 :(得分:4)
问题是这被解释为
(expression)(args to call function with)(args to call function)(args to call function)
你真正想要的是
(expression)(args to call function with)(expression)(args to call function)
这样做的唯一方法是用分号中断期望
(expression)(args to call function with);(expression)(args to call function)
或者,您可以使用标准较低的!
!function(){
console.log('main')
}()
!function(){
console.log('two')
}()
答案 2 :(得分:2)
解决这个问题的一种方法是将每个IIFE包装在一个块中:
{(function(){
console.log('main')
})()}
{(function(){
console.log('two')
})()}
或者,或许更简单地说,将这两者结合起来:
(function(){
console.log('main')
console.log('two')
})()
最后一个选择是将所有IIFE放入一个数组中,然后按顺序调用它们:
[
function(){
console.log('main')
},
function(){
console.log('two')
}
].forEach(function (fn) { fn() })
如果你需要很多这些,最后一个可能会很好,但同样,如果可能的话,最好结合使用。