Javascript 定义了两个导致错误的自调用匿名函数
我有两个自调用函数,但出现了一个错误Javascript 定义了两个导致错误的自调用匿名函数,javascript,gulp,Javascript,Gulp,我有两个自调用函数,但出现了一个错误 Uncaught TypeError: undefined is not a function 代码: (function(){ //a.min.js console.log('main') })() (function(){ //b.min.js console.log('two') })() 感谢大家提供的解决方案,但我想知道,如果通过一些自动化工具(如gulp)进行连接和缩小,如何解决这个问题 (function(){
Uncaught TypeError: undefined is not a function
代码:
(function(){ //a.min.js
console.log('main')
})()
(function(){ //b.min.js
console.log('two')
})()
感谢大家提供的解决方案,但我想知道,如果通过一些自动化工具(如gulp)进行连接和缩小,如何解决这个问题
(function(){
console.log('main')
})();
(function(){
console.log('two')
})();
这使得第一个IIFE被解释为未关闭,而第二个代码块在被解释为第一个IIFE的参数时创建了一个错误。问题是这被解释为
(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')
}()
解决此问题的一种方法是不使用分号,将每个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() })
如果您需要大量的分号,最后一个可能会很好,但再次强调,如果可能的话,最好是合并。为什么分号,它们在不同的行上,然后我会有另一个问题,我使用gulp进行缩小,我不能强制分号,因为这是唯一的解决方法。问题是失踪的人semicolons@user3610227:换行符不分隔语句。只有分号可以。下面是您的示例的简化版本,使用函数引用:(foo)((bar)(
)。明白了,但是假设第一个iLife在a.min.js中,第二个在b.min.js中,两者都通过gulp、@user3610227缩小:您可以在每个源文本的末尾自动插入分号。或者使用类似的方法。