zoukankan      html  css  js  c++  java
  • javascript立即调用的函数表达式N种写法(第二篇)

      上一篇博客我谈到将函数声明转换为函数表达式最常见的一种写法是:通过括号()将匿名函数声明转换为函数表达式即(function(){})();

    言外之意就是还有其他方式,记住:任何消除函数声明和函数表达式间歧义的方法,都可以被解析器正确识别!它们可以分为5类,超过10多种:

    (function(){})(); //最常见的写法 下文没特殊指明就是指它
    (function(){});   //容易与上面的混淆
    [function()()];
    
    //一元运算符
    ~function(){};
    +function(){};
    -function(){};
    !function(){};  //常见于一些第3方代码
    
    //关键字
    delete function() {}();
    typeof function() {}();
    void function() {}();
    new function() {}();
    new function() {};
    
    var f = function() {}();
    
    1, function() {}();
    1 ^ function() {}();
    1 > function() {}();
    1 && function(){}(); 
    //...

      当然,它们之间也有性能的差异:new永远是最慢的,+-在chrome速度惊人,常见的()和!在各浏览器中的表现也算上乘,另外+-比()少一个字符。

      解惑:我们可能经常看到一些插件前面会加一个;分号,我的理解如下:

    glue()

    //
    插件 (function(){ //.....前面应该加;分号 })();
    //Uncaught TypeError: undefined is not a function

    glue()函数和插件单独执行是没有错误的,但是当glue()与插件通过某种方式合并在一起了就会报错。所以我们可以这样去写:

    ;(function(){
    //省略一段代码
    })();
    --------------------------
    ;!function(){
    //省略一段代码
    }();
    ---------------------------
    ;+function(){
    //省略一段代码
    }();
    ----------------------------
    //等等

      以上学会可当装逼之用(~><~),同时再也不会为看不懂别人的代码而烦恼了!

  • 相关阅读:
    剑指Offer 13.机器人的运动范围
    笔试题目-无向图是否全连通
    面试题目-最小代价的寻路问题
    京东一面问题
    剑指Offer 07.重建二叉树
    剑指Offer 12.矩阵中的路径
    剑指Offer 10-I.斐波那契数列
    剑指Offer 06.从尾到头打印链表
    剑指Offer 05.替换空格
    剑指Offer 04.二维数组中的查找
  • 原文地址:https://www.cnblogs.com/wang-jiang/p/4096330.html
Copyright © 2011-2022 走看看