<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>xxxxx</title> </head> <body style="background: #023365"> </body> <script type="text/javascript"> Aoo();//不报错 //函数声明 function Aoo(){ console.log("Aoo"); } /** Boo();//报错Boo is not a function,应该放在函数表达式之后。 //函数表达式 var Boo = function(){ console.log("Boo"); } */ //在函数表达式之后加上括号之后,可以不用调用Coo方法 //Coo()方法,COO方法都会自动执行 var Coo = function(){ console.log("Coo"); }(); //匿名函数之后不能添加括号,否则将会报错 //function statement requires a name /** function(){ console.log("Doo"); }() */ /*立即执行函数里面的函数必须是函数表达式, 所以由var Coo = function() {}()可以理解 为在匿名函数前加了 = 运算符后,将函数声明转化 为函数表达式,所以拿!,+,-,()...等运算符来测试下是否如此*/ //注意:以下将申明函数转为函数表达式要加";"否则会出现 //报错:intermediate value)(...) is not a function !function(){ console.log(1) }(); +function(){ console.log(2) }(); -function(){ console.log(3) }() (function(){ console.log(4) })() /*由此可见,加运算符确实可将函数声明转化为函数表达式, 而之所以使用括号,是因为括号相对其他运算符会更安全, 可以减少不必要的麻烦。立即执行函数与正常函数传参形式是一致的。*/ var Eoo = function(var1,var2){ console.log("Eoo:"+var1+var2); }(1,3); /*(function(){}())这样写的好处是在内部定义的变量 不会跟外部的变量有冲突,达到保护内部变量的作用。*/ </script> </html>