在javaScript世界中函數是一等公民,它不僅擁有一切傳統函數的使用方式(聲明和調用),而且可以做到像簡單值一樣賦值、傳參、返回,這樣的函數也稱之為第一層函數(First-class Function)。不僅如此,JavaScript中的函數還扮演了類別的建構子的作用,同時又是一個Function類別的實例(instance)。這樣的多重身分讓JavaScript的函數變得非常重要。
函數入門級
JavaScript函數像一般語言一樣也是遵循先宣告後使用的原則,函數名稱只能包含字母、數字、底線或$,且不能以數字開頭。函數常見的宣告方式有以下兩種:
// 直接声明函数myfunc function myfunc(/* arguments */) { } // 把匿名函数赋值给本地变量myfunc var myfunc = function(/* arguments */) { }
注意,上面兩種函數宣告方式有細微的差別:第一種方式在宣告時就是一個命名的函數,無論是宣告在呼叫之前、呼叫之後,甚至是不會執行到的位置(例如return語句之後或是永遠不會為真的分支裡),都在整個作用域可訪問;第二種方式是透過把匿名函數賦值給變數的方式,嚴格意義上說這不是函數的宣告(function declaration)而是一個函數表達式(function expression),在賦值之前這個函數不能被任何程式碼存取到,也就是說這個賦值必須在呼叫之前完成,否則呼叫時會出現錯誤:"TypeError: undefined is not a function"。例如:
myfunc1(); // 能够正常调用,因为myfunc1采用直接声明的方式 function myfunc1() { } myfunc2(); // 出错 TypeError: undefined is not a function var myfunc2 = function() { };
函數的基本呼叫方式與傳統語言相同用一對括號呼叫: myfunc()。 JavaScript的函數也支援直接或間接的遞歸(recursive)調用,例如經典的斐波那契函數用JavaScript可以這樣實現:
function fib(n) { if (n == 1 || n == 2) { return 1; } else { return fib(n - 2) + fib(n - 1); } }
在JavaScript的函數可以處理變長參數,在函數內部都擁有一個名為arguments的局部變量,它是一個類別數組(array-liked)的對象,裡麵包含了所有調用時傳入的參數,有length屬性表示參數的個數。例如:
function test() { alert(arguments.length); } test(1); // 1 test(1, 'a'); // 2 test(true, [], {}); // 3 利用arguments可以实现类似C语言printf的功能,也可以用来实现方法的多态。
以上是javascript函數入門級學習實例程式碼詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!