函數聲明和函數表達式數組
在 JS 中定義函數的方式有兩種:一種是函數聲明,一種是函數表達式。函數
例如:spa
//函數聲明 function fun() { ... }
//函數表達式 var f = function() { ... }
它們的區別在於 JS 會把函數聲明提高到做用域頂部,而函數表達式只有在執行到該語句時纔會生效指針
關於函數的其餘注意事項:code
一、函數名後面跟圓括號 "()" 表示當即執行該函數,例如:對象
var test = fun(); //表示執行 "fun" 這個函數,並將返回值賦值給 "test" 變量blog
var test = fun; //表示將 "fun" 函數的指針賦值給 "test" 變量,"test" 是該函數的一個引用作用域
二、函數的 「arguments」 對象是一個參數數組,可使用 「arguments」 + 下標的方式訪問傳入函數中的參數string
使用匿名自執行函數模擬塊級做用域it
JS 中只有全局做用域和函數級做用域,並無 C++ 那種花括號包裹起來的塊級做用域,可是能夠經過匿名自執行函數模擬塊級做用域
例如:
(function() { ... })();
以上代碼定義並當即調用了一個匿名函數,將這個匿名函數包含在一對圓括號中是由於 "()" 這個運算符只對函數表達式有效,而 "function" 是 JS 中的一個關鍵字,位於句首表示函數聲明,是不能被執行的。
高階函數
高階函數是指至少知足下列條件之一的函數:
一、函數能夠做爲參數被傳入
二、函數能夠做爲返回值輸出
例如:
var isString = function(obj) { return typeof(obj) == 'string'; } var isNumber = function(obj) { return typeof(obj) == 'number';
這兩個用於判斷數據類型的函數中的大部分代碼都是能夠重複利用的,若是之後還要擴展的話老是須要從新定義一個函數,而使用高階函數就能夠避免這些問題
例如:
function isType(type) { return function(obj) { return typeof(obj) == type; } } var isString = isType('string'); var isNumber = isType('number');