立即执行函数表达式

参考链接:

https://my.oschina.net/u/2331760/blog/468672?p=%7B%7BcurrentPage+1%7D%7D

搞清楚 函数声明,函数表达式,匿名函数的关系

相关声明方式:

<script>
        //匿名函数第1种方式  强制运算符() 使函数调用执行
        (function (a, b) {
            console.log("第1种方式" + (a + b));
        })(3, 4);
        //匿名函数第2种方式  第一个()返回函数引用 第二个()调用函数
        (function (a, b) { console.log("第2种方式" + (a + b)); }(3, 4));
        //匿名函数第3种方式  使用void
        void function (a, b) {
            console.log("第3种方式" + (a + b));
        }(3, 4);
        //匿名函数第4种方式 使用+/- 使用操作符将函数连接为表达式
        +function (a, b) {
            console.log("第4-1种方式" + (a + b));
        }(3, 4);
        -function (a, b) {
            console.log("第4-2种方式" + (a + b));
        }(3, 4);
        ////这两种 报错奥
        //++function (a, b) {
        //    console.log("第4-3种方式");
        //}(3, 4);
        ////这两种 报错奥
        //--function (a, b) {
        //    console.log("第4-4种方式");
        //}(3, 4);
        //匿名函数第5种方式 使用~
        ~function (a, b) {
            console.log("第5种方式" + (a+b));
        }(3, 4);

        //匿名函数第6种方式 使用[]包裹
        [function (a, b) {
            console.log("第6种方式" + (a + b));
        }(3, 4)];

        //匿名函数第7种方式 匿名函数前加 typeof
        typeof function (a, b) {
            console.log("第7种方式" + (a + b));
        }(3, 4);

        //匿名函数第8种方式 匿名函数前加 delete
        delete function (a, b) {
            console.log("第8种方式" + (a + b));
        }(3, 4);
    </script>

    <script>
        fnName();
        function fnName(){};
 
        fnName();
        var fnName=function(){
            
            }//报错,变量fnName还未保存对函数的引用,函数调用必须在函数表达式之后   这个不会报错,不知道作者为啥这样描述

        var fnName=function(){
            alert('Hello World');
        }();//函数表达式后面加括号,当javascript引擎解析到此处时能立即调用函数

        function fnName(){
            alert('Hello World');
        }();
        //语法错误,Uncaught SyntaxError: Unexpected token ),这个函数会被js引擎解析为两部分:
        //1.函数声明 function fnName(){ alert('Hello World'); } 
        //2.分组表达式 () 但是第二部分作为分组表达式语法出现了错误,因为括号内没有表达式,把“()”改为“(1)”就不会报错
        //但是这么做没有任何意义,只不过不会报错,分组表达式请见:
        //分组中的函数表达式http://www.nowamagic.net/librarys/veda/detail/1664

        function(){
            console.log('Hello World');    
        }();//语法错误,Uncaught SyntaxError: Unexpected token (
    </script>
原文地址:https://www.cnblogs.com/niuge/p/6841549.html