参考链接:
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>