2.函數
2.1函數直接量
函數直接量是用作運算式,而不是用作語句,它無需指定函數名。與函數寫法的比較:
Js代碼
function f(){}
var f = function(){}
2.2函數的參數
Js中函數的參數個數和類型是可以很任意的,這就需要用於實質的情況進行相應的判斷處理。
選擇性參數
如果一個函數的參數是可選的,那麼如果沒有傳的話,則是underfined的值,則在函數裡用||對它進行賦預設值。這種寫法很常用。
用對象來作為函數的參數
當函數的參數較長的用,且常與||一起使用。
參數類型
如果對函數的參數類型有著嚴格的要求,那麼記得一定要在函數內對類型做判斷,如果類型不正確,則拋出異常來報告這一事實。如arraycopy()方法,期望的參數是數組,則如果傳入的不是數組,那麼需要拋出。
再比如我們計算一個數組所有元素的和,如果是在以前,程式裡是數組裡預先是判定所有的元素都是數值的,然後根據數值的元素的情況去求和。但是,很多時候開發人員並不是一個人,可能你要處理的數組是別人開個介面提供給你的,或者你是從資料庫去取出資料來構造出數組,這時候你就不能都把元素當作數值來判斷,必須對傳入的是否是數組,及元素是否是數值進行相應的判斷,如果元素有underfined或null時忽略,或元素包含有不是數值時給出提示,或傳入的值不是數組時給出提示。具體的代碼如下:
Js代碼
function ArrayUserCommMgr{}
ArrayUserCommMgr.prototype={
isArray:function(a){
var result = false;
if((a instanceof Array)||(a && typeof a == "object" && "length" in a)){
result = true;
}
return result;
},
getSum:function(a){
if (arrayUserCommMgr.isArray()){
var total = 0;
for(var i = 0; i < a.length; i++) {
var element = a[i];
if (!element) continue; // ignore null and undefined elements
if (typeof element == "number"){
total += element;
}else{
throw new Error("sum(): all array elements must be numbers");
}
}
}else{
throw new Error("sum(): argument must be an array");
}
}
}
以上代碼注意的是:
1、用((a instanceof Array)||
(a && typeof a == "object" && "length" in a))
來判斷是否傳入的是數組(instanceof Array),或類似數組的對象((a && typeof a == "object" && "length" in a))