匿名函数相关

作者: guwenmei | 来源:发表于2017-01-20 16:17 被阅读0次

    自执行函数的三种写法

    第一种:

    (function(){
        //...
     }();
    //常见写法,JQuery所采用
    
    第二种:
    (function(){
        //...
     ()};
    
    第三种:
    !function(){
        //...
     ();
    //// 但在前面加上一个布尔运算符(只多了一个感叹号),就是表达式了,将执行后面的代码,也就合法实现调用。在前面加上~+-等一元操作符也可以。。其实还有好几种符合都可以保证匿名函数声明完就立即执行
    
    第三种为什么那么写?

    我们都知道函数声明有两种方式:

    function fnA(){
      alert('msg');
    }
    //声明式定义函数
    var fnB = function(){
      alert('msg');
    }
    //函数赋值表达式定义函数
    

    前面的自执行函数都是匿名函数。通常,我们调用一个方法的方式就是 FunctionName()。但是,如果我们尝试为一个“定义函数”末尾加上(),解析器是无法理解的。

    function msg(){
      alert('message');
    }();
    //解析器是无法理解的
    

    如果将函数体部分用()包裹起来就可以运行并且解析器是不报错的,如:

    (function($) {         
     //...  
    })(jQuery);```
    那为什么将函数体部分用()包裹起来就可以了呢?
    原来,使用括号包裹定义函数体,解析器将会以函数表达式的方式去调用定义函数。也就是说,任何能将函数变成一个函数表达式的作法,都可以使解析器正确的调用定义函数。而 ! 就是其中一个,而 + - || 都有这样的功能。
    另外,用 ! 可能更多的是一个习惯问题,不同的运算符,性能是不同的。
    
    [更多参考链接](http://swordair.com/function-and-exclamation-mark/)http://swordair.com/function-and-exclamation-mark/

    相关文章

      网友评论

        本文标题:匿名函数相关

        本文链接:https://www.haomeiwen.com/subject/kyawbttx.html