zoukankan      html  css  js  c++  java
  • 意译:自调用函数表达式

    原文地址:https://github.com/airbnb/javascript/issues/21#issuecomment-10203921

    一、写在前面

      本文将一如既往地遵循从自身理解出发,而非100%按原文逐句翻译的方式进行“伪翻译”,若有谬误请各位指正,谢谢!!

    二、介绍

      IIFE(the Immediately Invoked Function Expression):定义函数的同时并执行该函数。

    三、常见的使用方式

    !function(){}(); // 返回 true
    ~function(){}(); // 返回 -1
    +function(){}(); // 返回NaN
    -function(){}(); // 返回NaN
    void function(){}(); // 返回undefined

    四、本文要讨论的使用方式

      1. 方式一

    (function(){   
    })();

      2. 方式二(大神crockford推荐的方式):

    (function(){
    }());

    五、两种使用方式的区别

    让我们通过下面这个缺少分号(;)的例子来初探它们的区别吧!

    方式一的示例:

    (function(){
        console.log('module1');
    })()(function(){
        console.log('module2');
    })();
    /*
     * 返回 module1 
     * 然后抛TypeError: undefined is not a function异常
     */

    方式二的示例:

    (function(){
       console.log('module1');
    }())(function(){
       console.log('module2');
    }());
    /*
     * 返回 module1
     * 返回 module2
     * 最后抛出TypeError: undefined is not a function异常
     */

    六、解构现象理解本质

     首先要牢记一条规则:括号会马上执行其前面的表达式下面让我们逐步分解这两个示例,好好理解一下吧!

    方式一的示例分解:

      1. 第一步先执行 (function(){console.log('module1');})() ,返回的结果是 undefined ,最后剩下将被执行的代码是 undefined(function(){console.log('module2');})(); ;

      2. 第二步根据括号会马上执行其前面的表达式这一规则,将执行 undefined(function(){console.log('module');}) ,很明显undefined不是有效函数,这样的调用方式必须抛异常的。

    方式二的示例分解:

      1. 第一步先执行 function(){console.log('module1');}() ,返回结果是 (undefined) ,再经过括号运算符得到 undefined ,最后剩下将被执行的代码是 undefined(function(){console.log('module2');}());  ;

      2. 第二步将执行function(){console.log('module2');}() ,返回结果是 undefined ,最后剩下将被执行的代码是 undefined(undefined);  ;

      3. 第三步当然是抛异常了!

    七、提倡的使用方式

    想避免因少写一个分号造成不必要的困扰,那么就像下面的那样写吧!

    ;(function(){
      console.log('IIFE');
    }());

    原创文章,转载请注明来自^_^肥仔John[http://fsjohnhuang.cnblogs.com]

    本文地址:http://www.cnblogs.com/fsjohnhuang/p/3755624.html (本篇完)

  • 相关阅读:
    01背包--小P寻宝记——粗心的基友
    StringIndexOutOfBoundsException
    2014秋C++ 第8周项目 分支程序设计
    【JavaScript】正則表達式
    专业函数画图软件Origin
    设计模式学习–Decorator
    python使用requests模块模拟登陆知乎
    分享几个比较好的站点
    【转载】selenium之 定位以及切换frame(iframe)
    判断Selenium加载完成
  • 原文地址:https://www.cnblogs.com/fsjohnhuang/p/3755624.html
Copyright © 2011-2022 走看看