JavaScript世界的一等公民 - 函數__區塊鏈
來源:互聯網
上載者:User
簡介 在很多傳統語言(C/C++/Java/C#等)中,函數都是作為一個二等公民存在,你只能用語言的關鍵字聲明一個函數然後調用它,如果需要把函數作為參數傳給另一個函數,或是賦值給一個本地變數,又或是作為傳回值,就需要通過函數指標(function pointer)、代理(delegate)等特殊的方式周折一番。 而在JavaScript世界中函數卻是一等公民,它不僅擁有一切傳統函數的使用方式(聲明和調用),而且可以做到像簡單值一樣賦值、傳參、返回,這樣的函數也稱之為
第一級函數(First-class Function)。不僅如此,JavaScript中的函數還充當了類的建構函式的作用,同時又是一個Function類的執行個體(instance)。這樣的多重身份讓JavaScript的函數變得非常重要。
一、JavaScript函數入門級 JavaScript函數像一般語言一樣也是遵循先聲明後使用的原則,函數名只能包含
字母、數字、底線或$,且不能以數字開頭。函數常見的聲明方式有以下兩種: - collapse source view plain copy to clipboard print ? // 直接聲明函數myfunc function myfunc(/* arguments */) { } // 把匿名函數賦值給本地變數myfunc var myfunc = function(/* arguments */) { } 注意,上面兩種函式宣告方式存在細微的差別:第一種方式在聲明時就是一個
命名的函數 ,無論是聲明在
調用之前 、
調用之後 ,甚至是
不會執行到的位置 (例如return語句之後或是永遠不會為真的分支裡),都在整個範圍可訪問;第二種方式是通過把匿名函數賦值給變數的方式,嚴格意義上說這不是一個函數的聲明(function declaration)而是一個函數運算式(function expression),在賦值之前這個函數不能被任何代碼訪問到,也就是說這個
賦值必須在調用之前完成 ,否則調用時會出現錯誤:"TypeError: undefined is not a function"。例如: - collapse source view plain copy to clipboard print ? myfunc1(); // 能夠正常調用,因為myfunc1採用直接聲明的方式