3
我限定在一个Javascript
文件的各种模块:立即调用函数表达式抛出“对象是不是一个函数”
var module = {/* ... */}
(function(){
console.log('Invoked');
})()
然而IIFE
引发错误:
>类型错误:对象是不是功能
我试着复制并粘贴IIFE
的代码,没有问题。
我限定在一个Javascript
文件的各种模块:立即调用函数表达式抛出“对象是不是一个函数”
var module = {/* ... */}
(function(){
console.log('Invoked');
})()
然而IIFE
引发错误:
>类型错误:对象是不是功能
我试着复制并粘贴IIFE
的代码,没有问题。
模块定义需要一个分号在声明的末尾:
var module = {/* ... */}; // <======= Semicolon!
(function(){
console.log('Invoked');
})()
没有它,JavaScript是试图调用该对象:
var module = {/* ... */}(function(){console.log('Invoked');})()
或缩短:
var module = {/* ... */}()
尝试编写两个彼此相邻的IIFE时,您会遇到同样的问题:
(function(){})()
(function(){})()
这不起作用,因为一个函数声明返回undefined
:
TypeError: undefined is not a function
的[为什么这个分组操作符+函数调用立刻(可能重复http://stackoverflow.com/questions/14810951/why-is-this-grouping-operator-function-immediatly-invoked) –
您应该在语句后始终使用分号 - https://stackoverflow.com/a/444082/1766230 – Luke