Javascript腳本語言容許開發者經過編寫函數的方式組合一些可重複使用的代碼塊,增長了腳本代碼的結構化和模塊化。函數是經過參數接口進行數據傳遞,以實現特定的功能。javascript
函數的建立大體有三種方法:java
方法一:function functionName([parameters]){functionBody}; 數組
Example:app
function add(a,b) { return a + b; } //alert(add(2,3));
當咱們這樣聲明函數時,函數的內容被解釋(只有調用函數時,纔會執行),同時一個名爲Add的對象被建立。模塊化
方法二:將一個匿名函數賦值給一個變量(var)函數
Example a:性能
var add = function (a,b) { alert(a+b); } //add(3,4);
這種聲明的語法看起來怪異,可是它能更好的讓咱們理解「函數即對象」。經過這種方式聲明的函數一樣是被執行而沒有被執行。spa
Example b:設計
var obj = new Object(); obj.add = function (a,b) { alert(a+b); } //obj.add(1,10);
這個例子代表,當咱們須要將一個自定義函數做爲某個對象的屬性時,這種函數的定義方式是很是有用的。對象
方法三:經過Function對象來建立函數
語法:var Name=new Function([param1Name, param2Name,...paramNName], functionBody);
var add = new Function("a", "b", "alert(a+b)"); //add(2,4);
Function是對象(建立函數的對象)。實際上,在javascript中聲明一個函數本質上爲建立Function對象的一個實例,而函數名則爲實例名。
與其餘程序設計語言不一樣,javascript不會驗證傳遞給函數的參數個數是否等於函數定義的參數個數。若是傳遞的參數個數與函數定義的參數個數不一樣,則函數執行起來有可能會產生一些意想不到的錯誤,任何遺漏的參數都會以Undefined傳遞給函數,多餘的參數將忽略。爲了不錯誤,應該讓傳遞的參數個數與函數定義的參數個數相等。在javascript中提供了一個arguments數組對象,該對象能夠獲取從javascript代碼中傳遞給函數的參數。
Example:
function add(x,y) { if (arguments.length != 2) { var str = "傳遞的參數個數有誤,一共傳遞了" + arguments.length + "個參數,分別爲:\n"; for (var i = 0; i < arguments.length; i++) { str += "第" + (i + 1) + "個參數的值爲:" + arguments[i] + "\n"; } return str; } else { var z = x + y; return z; } } console.log("add(2,4,6):"+add(2,4,6));
運行結果:
注:能夠經過typeof來判斷函數參數傳遞的類型。
在javascript中,函數也是一個對象。既然函數是對象,那麼函數也擁有本身的屬性以及方法。
1.length屬性
在這裏須要區別arguments對象的length屬性,函數的length屬性能夠得到函數定義的參數個數而arguments對象的length屬性是得到實際傳遞給函數的參數的個數。函數的length屬性能在函數體以外使用,而arguments的length屬性只能在函數體內訪問。
Example:
function add(x, y) { if (add.length != arguments.length) { return "傳遞過來的參數個數與函數定義的參數個數不一致!"; } else { var z = x + y; return z; } } console.log("函數add的length值爲:" + add.length); console.log("add(3,4):" + add(3, 4)); console.log("add(3,4,5)" + add(3, 4, 5));
運行結果:
二、函數的方法(以Call()與apply()爲例)
在javascript中每一個函數都有Call()與apply()方法,函數能夠像其餘對象同樣來調用這兩個方法,這兩個方法的做用都是將函數綁定到另外一個對象上運行,二者僅在定義參數的方式上有所不一樣。
call()的使用語法格式以下:
函數名.call(對象名,參數1,參數2,...)
apply()的使用語法格式以下:
函數名.apply(對象名,數組)
Example:
function getsum() { var sum=0; for (var i = 0; i < arguments.length;i++) { sum += arguments[i]; } return sum; } var obj = new Object(); var arr = [1, 3, 5]; console.log("sum1:" + getsum.call(obj, 2, 4, 6)); console.log("sun2:"+getsum.apply(obj,arr));
運行結果: