aileLiu

—— on the way home....

笔记:IIFE 立即执行的函数表达式 +function ($) { }(window.jQuery);

 

在Bootstrap源码(具体请看《Bootstrap源码解析1》)和其他jQuery插件经常看到如下的写法: 

+function ($) {   
  
}(window.jQuery); 

这种写法称为:IIFE 2(Imdiately InvokedFunction Expression 立即执行的函数表达式)。

 

解析:

先弄清 函数表达式(function expression)3和 函数声明(function declaration)的区别:

函数表达式  var test = function() {}; 

函数声明     function test() {};

* 函数表达式 中的函数可以为匿名函数,也可以有函数名,但是该函数实际上不能直接使用,只能通过表达式左边的变量 test 来调用。

函数声明 时必须有函数名。

   匿名函数通过一元操作符+变成了函数表达式。也可以使用 - ~ !等其他一元运算符或者括号,目的是为了引导解析器,指明运算符附近是一个表达式。

   函数表达式通过 末尾的() 来调用并运行。就是一个IIFE。

  * 传参,为了避免$与其他库或者模板申明冲突,window.jQuery 作为参数传递。

  * 各种符号性能对比4结果:

   

   由图可见+性能最差(在Firefox下差距更明显),其他几种都差不多。不过IIFE只执行一遍,对js执行效率的影响特别小,使用哪种还是看个人爱好。

 

Other:


 

   01. jQuery优化

一段看上去写法有点像的代码。大部分项目用这段代码做作用域,这段代码会在DOM加载完成时初始化jQuery代码。

$(function(){   
  
}); 

  这种写法等同于 

$(document).ready(function(){  
// 在DOM加载完成时初始化jQuery代码。  
});  

  区别于  

$(window).load(function(){  
// 在图片等媒体文件加载完成时,初始化jQuery代码。  
}); 

  结合IIFE的最佳实践,更好的写法是,立即执行document ready

+function ($) {  
   $(function(){  
  
  })    
}(window.jQuery)  

 

  02. 在Bootstrap和其他插件中经常看到如下写法:

+function ($) {
 "use strict";    
    
}(window.jQuery);  

  关于字符串"use strict";请看严格模式 5

 

 

参考出处:http://suqing.iteye.com/blog/1981591

posted on 2014-07-10 17:57  aileLiu  阅读(911)  评论(0编辑  收藏  举报

导航