两个自调用匿名函数定义导致错误

时间:2015-01-13 20:37:00

标签: javascript gulp

我有两个自我调用函数,但我收到错误

Uncaught TypeError: undefined is not a function

(function(){  //a.min.js
    console.log('main')
})()

(function(){ //b.min.js
    console.log('two')
})()

谢谢大家的解决方案,但我想知道如果通过gulp等一些自动化工具完成连接和缩小,如何解决这个问题

3 个答案:

答案 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() })

如果你需要很多这些,最后一个可能会很好,但同样,如果可能的话,最好结合使用。