10. 一級函式
函式宣告:有名稱的函式
瀏覽器解析頁面時,會先尋找、處理所有的「宣告函式」,接著才按順序處理其他程式碼,這叫 hoisting 提升。
有的話,電腦會在記憶體某處建立函式,再將位置付值給 "同名" 變數。
接著才從頭執行函式。
function funcName (){
// ...
}
函式宣告不是運算式,而是敘述句。
函式運算式:將「匿名函式」指定給變數。
在按順序處理程式碼時,遇到才處理函式運算式, 運算式被求值後,才會被定義。 遇到的話,電腦會在記憶體某處建立函式,再將參址器賦值給該變數。 好處是你能決定該變數在哪裡。
let varFunc = function (){
// ...
}
fly(4)
var fly = function(){ //... }
// 報錯
// 先宣告函示
var fly = function(){ //... }
fly(4)
// 可運算
函式的值
無論是宣告函式或是函式運算式,該值是一個參址器:
函式參址器後面加 ()
會導致被叫用。
並且可以賦值給其他變數。
// 運算式
var a = function(){
// ...
}
// 函式宣告
function b(){
...
}
var haha = a;
var jaja = b;
// haha 取得 a 的參址器
// jaja 取得 b 的參址器
haha()
jaja()
一級值
其他型別的值:物件、陣列、布林、數字...叫做一級值。
- 可以作為參數,被賦值給一個變數、
- 可以作為引數,被傳遞給函式、
- 可以從函式回傳。
把函式想成是一個 "值",,但又可以被呼叫、執行內部的程式碼。 js 中把函式視為一級值。
function 作為引數,被傳遞給函式
http://jsbin.com/hutogetoli/17/edit?js,console
陣列 sort 方法的工作原理
他需要傳入一個知道如何比較的函式, 該比較函式會回傳三種結果
- a > b : 1,
- a == b : 0,
- a < b : -1 sort 方法是破壞性函式,他改變的是原始陣列。