• 锱铢必较,从(function(){}())与(function(){})()说起


      今天做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包起来就能知道是自执行,根本不用看到最后还有个括号才能判断是自执行。

     

  • 相关阅读:
    Windows Bat命令常用操作
    Centos下安装Geth
    Centos常用操作
    为什么CEdit使用SetSel无法取消选择?
    VC编译参数/Zm问题
    XX.exe已经停止工作,的处理兼容性
    excel表,Alt+F11调用出vb语言处理excel表内容,很方便
    在限制了可选日期范围的calendar中,使几个日期不可选的方法
    Agile敏捷开发
    做软件的这些年
  • 原文地址:https://www.cnblogs.com/boanyi/p/zizhixing.html
Copyright © 2020-2023  润新知