在jquery和requirejs等开源js项目中经常看到类似好下的语句
(function(){
alert("ieef");
}());
类似于这样的语句就是js中的立即调用函数表达式。
为了理解这样的函数可以拆一下。首先写一个我们熟悉的函数定义,然后立即调用
function iife(){
alert("iife");
}
iife();
这个效果虽然和上面的iife一样,但是带来一个副作用:就是iife函数会污染全局变量。也就是说如果之前已经定义了一个iife函数或者iife变量,那个就会被这个变量所覆盖,为了避免发生这样的情况最好的解决方案是使用一个匿名函数,然后让式名函数立即执行。
function(){
alert("iife");
}();
如果这样写的话就发生了js语法错误。
如果在函数定义之前加个(),就可以按照我们预期执行了。
(function(){
alert("iife");
})();
最外面的那个(),可以放到里面,这样也能运行。
(function(){
alert("iife");
}());
这就是我们在很多开源项目中常见的iife。
传递参数的格式。
(function(global){
alert("iife");
alert(global);
}(window));