從零開始的全棧工程師——html篇2.6
函式
Var 是js的關鍵字,用於宣告變數,宣告在記憶體模組完成,定義(=)是在執行模組完成。
Var可以在記憶體模組提前(js程式碼執行前)完成所以有變數提升這個功能。
因為a沒有帶var,所以不存在變數提升,瀏覽器會把他當成window的屬性。
Function也是js的關鍵字,用於宣告和定義函式的,宣告和定義都在記憶體模組完成了。
Function 也是記憶體模組提前完成,所以有函式提升這個功能。
變數提升和函式提升 都叫預解釋。都是瀏覽器的。
1.函式的定義
函式是通過function定義的,function 後跟的是函式名。
結構語法
function fn(){}
通過上圖我們可以發現,記憶體模組只存var的變數名。而存function整個程式碼塊,因為宣告和定義同時完成的
2.函式結構注意事項
1)函式名fn可有可無 有名的叫有名函式 無名的叫匿名
2)一定要帶小括號() 裡面放參數
3)函式定義 與 函式呼叫
定義 通過function 定義 function fn (){}
3.函式定義的四種方式
1)宣告式定義 function fn() {}
2)表示式定義 var fn=function() {} 匿名函式
3)自呼叫 定義和呼叫同時完成
(function(){})( )
~function(){}() ~
+function(){}() +
-function(){}() -
!function(){}() !
4)通過 物件的形式 var as=naw Function(){}
4.函式呼叫
函式最大的優勢 會形成一個獨立的模組 可以按需使用 可以重複使用
1)按需使用 可以提升效能 重複使用 可以減少冗餘
2)函式呼叫的過程
函式執行時會形成一個自己的私有作用域 最大的作用域是window
然後執行函式裡面的程式碼塊
5.作用域鏈
作用域鏈:函式內部的變數被呼叫時 首先會在自己的私有作用域下查詢是否有這個變數
有就直接用 沒有就會向他的上一級查詢 父級就是用父級的 父級沒有就會以此繼續向上查詢
直到window為止 widnow有就使用 沒有就is not defined 這種查詢機制我們叫作用域鏈
分析圖
6.函式遞迴:函式內部呼叫自身
分析圖
7.break和continue
break和continue
break 終止當前程式
continue 跳出當前的程式 執行下一個
break和continue只能用在迴圈語句中
如果條件語句想使用break只能使用return
1)return 返回的
每個函式都有一個返回值 如果函式人為return了 返回什麼就是什麼
如果沒有人為返回 結果就是undefined 並且return後面的程式碼不在執行了
案例分析
分析圖:
函式內部的return不影響內部的預解釋
函式內外的變數
函式外的變數 叫全域性變數 函式內的變數叫私有變數
看變數歸誰 看他在哪個作用域下宣告
私有變數的種類
1.在私有作用域下宣告的
2.通過函式傳參的叫私有變數
8.函式傳參 arguments引數
1)Function fn(a,b,c,d){} 將a b c d 叫引數
分析圖
2)形參實參
形參 定義上的引數
實參 執行上的引數
也可以直接賦值