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