兩種方式
函數(shù)聲明
function 函數(shù)名 () {} //分裝函數(shù) 無結(jié)果 可以不寫;
函數(shù)表達式(內(nèi)部為匿名函數(shù))
var 變量名 = function(){};
函數(shù)表達式中,創(chuàng)建的函數(shù)叫做匿名函數(shù),因為function關(guān)鍵字后面沒有標識符。
匿名函數(shù)調(diào)用
下面兩個等價
var aa = function(x){
alert(x);
}(5);//5
(function(x){alert(x);})(5);//5
自執(zhí)行函數(shù)
三種寫法特點:
①結(jié)構(gòu)清晰,開頭加!,結(jié)尾加()。不容易亂,推薦使用;
②可以表明匿名函數(shù)與之后的()為一個整體,推薦使用;
③無法表明函數(shù)與之后()為一個整體,不推薦使用:
創(chuàng)建了一個匿名的函數(shù),并立即執(zhí)行它,由于外部無法引用它內(nèi)部的變量,因此在執(zhí)行完后很快就會被釋放,關(guān)鍵是這種機制不會污染全局對象。
前面的()、+、-、!等告訴解析器這是個表達式,后面的()是讓函數(shù)執(zhí)行(表達式才能執(zhí)行)
(function () { /* code */ } ()); // 推薦使用這個
(function () { /* code */ })(); // 但是這個也是可以用的
// 如果你不在意返回值,或者不怕難以閱讀
// 你甚至可以在function前面加一元操作符號
!function () { /* code */ } ();
~function () { /* code */ } ();
-function () { /* code */ } ();
+function () { /* code */ } ();
以上 源 :https://www.cnblogs.com/jessiespur/p/9283101.html
中有詳細介紹
其他相關(guān)鏈接
https://www.cnblogs.com/ayning/p/4113314.html
https://www.cnblogs.com/timl525/p/5092132.html
http://www.cnblogs.com/TomXu/archive/2011/12/31/2289423.html
關(guān)于調(diào)用
有return時 return 返回到函數(shù)的頂部
function()返回return值 否則我return 默認返回undefined
document.write(function());
無return
調(diào)用
function();//函數(shù)內(nèi)部需要有輸出語句
多個函數(shù)共同實現(xiàn)一個效果 嵌套與否都可
框架 函數(shù)調(diào)用函數(shù)(自身或者別的)
預解析
js編譯
語法分析
查找基本語法有沒有錯誤
預解析
執(zhí)行之前進行預解析
var、function關(guān)鍵字提前到“當前”作用域的頂部,變量默認值為undefined
關(guān)于變量沖突:
函數(shù)覆蓋變量名稱 函數(shù)后面覆蓋前面
代碼順序執(zhí)行
給提升到頂部的變量賦值