zoukankan      html  css  js  c++  java
  • 锱铢必较,从(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包起来就能知道是自执行,根本不用看到最后还有个括号才能判断是自执行。

     

  • 相关阅读:
    富可视M310刷机包 MIUIV5 红米开发版 闪光 美化 稳定
    Windowsclient SSH 远程连接Windowsserver(PowerShell Server)
    数据结构与算法02--链表基础
    rhadoop linear regression 问题
    奇怪的git代理超时问题
    怎样利用Heartbeat与Floating IP在Ubuntu 14.04上创建高可用性设置
    IVS_原理
    NN入门
    算法体系
    CNN原理
  • 原文地址:https://www.cnblogs.com/boanyi/p/zizhixing.html
Copyright © 2011-2022 走看看