一、IIFE解释
全拼Imdiately Invoked Function Expression,立即执行的函数表达式。
像如下的代码所示,就是一个匿名立即执行函数:
(function(window, undefined){
// 代码...
})(window);
这个括号的目的,是为了把fnuction() {}转化为表达式。像一些库的源码,喜欢用如下方式代替:
~function(){
// 代码...
}();
+function(){
// 代码...
}();
其实,作用都一样,都是把function(){}转化成一个可执行的表达式,方便执行。 如果去掉该括号,则会报错。因为单纯的function(){}不是可执行的表达式
第二个括号的意义就是执行表达式了。
特殊形参undefined
可以知道这个示例,实参只有两个,而形参有三个。所以在函数执行的时候,形参undefined会默认赋值为undefined。
形参undefined的作用如下:
防止特殊值undefined被恶意代码篡改。
IE6等低版本浏览器,undefined是支持被修改的。而这个特殊值被修改后,像以下这种判断就失效了。
if(wall == undefined){
// 代码...
}
所以,这里多加一个形参的目的就是为了防止这种情况发生。只要在这个IIFE作用域内,undefined就能够正常获取到。
压缩代码可以压缩undefined
因为undefined作为形参,像YUI compressor这种类型的代码压缩工具,可以将其相关的值进行压缩,减小文件的体积。