今天做JsHint时,碰到一个警告:应该使用(function(){}())而不是(function(){})();看到这个我心想,这两种函数自执行有什么区别吗?自执行用了这么久,感觉对其理解仍然有点迷糊。于是,开始了一波百度。百度了一波后,再加上自己的一点理解对其终于有了一点眉目。

如果我们想要写一个自执行函数,第一反应会这样写:

 ;function(){/*函数内容*/}()  //然而,这样是会报错的。原因是当写一个匿名函数体之后,浏览器会将其当成是函数的声明,而不是函数表达式  

对此,网上也有很多消除函数声明和函数体歧义的方法进行自执行。如:

 +function(){/*函数内容*/}()  //返回NaN

 !function(){/*函数内容*/}() //返回false

 void function(){}  //返回undefined

再说(function(){}())与(function(){})()。其实从理论上讲,这两种写法都是可行的,只是细细探究的话,会发现二者的过程是不同的。

(function(){}()) //和上文的一些方法一样,即自执行,将函数作为表达式执行;

(function(){})() //则可以分开来看:

(function(){}) //相当于: var foo = function(){}; 然后, foo();

看起来都是可行的。但是至于JsHint为什么要求使用(function(){}()),个人感觉是因为 (function(){}()) 少了先将function(){}保存这一步,可能内存消耗较少(还请各位指教O(∩_∩)O)。另一方面,从代码规范上将,前者写法看到()将function包起来就能知道是自执行,根本不用看到最后还有个括号才能判断是自执行。

 

锱铢必较,从(function(){}())与(function(){})()说起的更多相关文章

  1. function,new function,Function,new Function 之间的区别

    测试一: var fud01 = function()  { var temp = 100; this.temp = 200; return temp + this.temp; } alert(typ ...

  2. (function(){...}())与(function(){...})()

    (function(){         ......   }())  或   (function(){            ......   })()  匿名函数自调用,也就是说,定义一个匿名函数 ...

  3. 浅析jQuery(function(){})与(function(){})(jQuery)之间的区别

    本篇文章主要是对jQuery(function(){})与(function(){})(jQuery)之间的区别进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 Jquery是优秀的Javas ...

  4. jQuery中$(function(){})与(function($){})(jQuery)、$(document).ready(function(){})等的区别详细讲解

    1.(function($) {…})(jQuery); 1).原理: 这实际上是匿名函数,如下: function(arg){…} 这就定义了一个匿名函数,参数为arg 而调用函数时,是在函数后面写 ...

  5. (function($){}) 和$(function(){}) 和$(function($){}) 区别

    请问下(function($){}) 和$(function(){}) 和$(function($){}) 有什么区别 谢谢 一.先看 jQuery(function(){ }); 全写为 jQuer ...

  6. function foo(){}、(function(){})、(function(){}())等函数区别分析

    前面一段时间,看到(function(){}),(function(){}())这些函数就犯晕,不知道它到底是什么意思,为什么函数外要加小括号,函数后要加小括号,加和不加到底有什么区别……一直犯迷糊, ...

  7. $(document).ready(function (){}) , $(function(){}) , $().ready(function(){}) , jquery(function(){}) , (function($){})(jquery)有什么区别

    $(document).ready(function(){...}) , $().ready(function(){...}) ,  $(function(){...}) , jquery(funct ...

  8. $(function(){})与 (function(){})() (function($){})() 的区别

    1. $(function(){ }) 或 jQuery(function(){ }) 此函数也可以写成 jQuery(function(){ }), 用于存放操作DOM对象的代码,执行其中代码时DO ...

  9. (function ( ){})( ) 与 (function ( ){}( )) 有什么区别?

    js立即执行函数: (function ( ){})( ) 与 (function ( ){}( )) 有什么区别? 转自:http://www.jb51.net/article/75089.htm ...

随机推荐

  1. 安装Chive提示CDbConnection failed to open the DB connection.

    最近初学PHP,看到Chive这个好玩的数据库管理工具,在登录时遇到这样的错误提示信息: CDbConnection failed to open the DB connection. 我的PHP版本 ...

  2. android文字阴影效果设置

    <TextView android:id="@+id/tvText1" android:layout_width="wrap_content" andro ...

  3. Lua和Javascript差异对比

    Lua模拟器js方案 1.语法级模拟lua与js语言差异 1.1注释 js 为//,lua为--. 1.2变量js利用val来声明全局变量不存在局部变量,lua则不需要直接定位则为全局变量,local ...

  4. js常用操作代码

    页面前进后退<input type=button value=刷新 onclick="window.location.reload()"><input type= ...

  5. 使用vs自带的wcf配置工具

    服务和行为是并列的 对应到配置文件中  wcf的配置在system.serviceModel中 可以有多个服务 一个服务会有一个主机以及多个终结点 主机包含多个基址 baseAddress 终结点,由 ...

  6. [NYOJ 860] 又见01背包

    又见01背包 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述     有n个重量和价值分别为wi 和 vi 的 物品,从这些物品中选择总重量不超过 W  的物品,求所 ...

  7. HW4.31

    import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...

  8. 获得URl信息

      public class GetUrlInfo {     public static void printfInfo(URL url)throws Exception     {         ...

  9. Yii路径总结(转)

    如果是 // 就会默认去调 protected/views/layouts //代表 绝对路径 其实 就是 绝对和相对的关系 /代表相对路径,如module/user下的layout  用单斜杠的话默 ...

  10. JavaScript实现拖拽预览,AJAX小文件上传

    本地上传,提前预览(图片,视频) 1.html中div标签预览显示,button标签触发上传事件. <div  id="drop_area" style="bord ...