一、IIFE解释

全拼Imdiately Invoked Function Expression,立即执行的函数表达式。

像如下的代码所示,就是一个匿名立即执行函数:

  1. (function(window, undefined){
  2. // 代码...
  3. })(window);
  4. 这个括号的目的,是为了把fnuction() {}转化为表达式。像一些库的源码,喜欢用如下方式代替:
  5. ~function(){
  6. // 代码...
  7. }();
  8. +function(){
  9. // 代码...
  10. }();
  11. 其实,作用都一样,都是把function(){}转化成一个可执行的表达式,方便执行。如果去掉该括号,则会报错。因为单纯的function(){}不是可执行的表达式
  12. 第二个括号的意义就是执行表达式了。

特殊形参undefined

可以知道这个示例,实参只有两个,而形参有三个。所以在函数执行的时候,形参undefined会默认赋值为undefined。
形参undefined的作用如下:

防止特殊值undefined被恶意代码篡改。

IE6等低版本浏览器,undefined是支持被修改的。而这个特殊值被修改后,像以下这种判断就失效了。

  1. if(wall == undefined){
  2. // 代码...
  3. }

所以,这里多加一个形参的目的就是为了防止这种情况发生。只要在这个IIFE作用域内,undefined就能够正常获取到。

压缩代码可以压缩undefined
因为undefined作为形参,像YUI compressor这种类型的代码压缩工具,可以将其相关的值进行压缩,减小文件的体积。