【創(chuàng)建函數(shù)】使用匿名函數(shù)
匿名函數(shù)的好處是:當(dāng)你調(diào)用其他函數(shù)時(shí),可以在參數(shù)組中直接定義它們晦闰。因此你并不需要正式的定義。
例如鳍怨,下面的代碼定義了一個(gè)函數(shù) doCalc(),它接受3個(gè)參數(shù)呻右。前兩個(gè)參數(shù)應(yīng)該是數(shù)值,第三個(gè)參數(shù)是一個(gè)將被調(diào)用鞋喇,并把這兩個(gè)數(shù)值傳入的函數(shù):
function doCalc(num1,num2,calcFunction){
return calcFunction(num1,num2);
}
你可以定義一個(gè)函數(shù)声滥,然后將不帶參數(shù)的函數(shù)名傳遞給 doCalc(),如下所示:
function addFunc(n1,n2){
return n1+n2;
}
console.log(doCalc(5,10,addFunc));
輸出結(jié)果為:
15
也可以選擇在 doCalc() 的調(diào)用中直接使用一個(gè)匿名函數(shù)侦香,如下所示:
console.log(doCalc(5,10,function(n1,n2){return n1+n2;}));
console.log(doCalc(5,10,function(n1,n2){return n1*n2;}));
輸出結(jié)果為:
15
50
【添加錯(cuò)誤處理】1.拋出自己的錯(cuò)誤
在 try/catch 塊中可以使用 throw 語句拋出自己的錯(cuò)誤落塑。
下面的代碼演示了如何將 throw 語句添加到一個(gè)函數(shù)來拋出一個(gè)錯(cuò)誤(即使不發(fā)生腳本錯(cuò)誤)。函數(shù) sqrRoot()接受一個(gè)參數(shù)x罐韩。然后憾赁,它測(cè)試x以驗(yàn)證它是一個(gè)正數(shù),并返回一個(gè)表示x的平方根的字符串散吵。如果x不是一個(gè)正數(shù)龙考,則相應(yīng)的錯(cuò)誤被拋出,而 catch 塊返回該錯(cuò)誤:
function sqrRoot(x){
try{
if(x=="") throw{message:"Can't Square Root Nothing"};
if(isNaN(x)) throw{message:"Can't Square Root Strings"};
if(x<0) throw{message:"Sorry No Imagination"};
return "sqrt("+x+") = " + Math.sqrt(x);
}catch(err){
return err.message;
}
}
function writeIt(){
console.log(sqrRoot("four"));
console.log(sqrRoot(""));
console.log(sqrRoot("4"));
console.log(sqrRoot("-4"));
}
writeIt();
下面是控制臺(tái)輸出矾睦,顯示根據(jù)向 sqrRoot()函數(shù)輸入的參數(shù)內(nèi)容晦款,拋出不同錯(cuò)誤:
Can't Square Root Strings
Can't Square Root Nothing
sqrt(4) = 2
Sorry No Imagination
【添加錯(cuò)誤處理】2.使用finally
異常處理的另一個(gè)重要工具是 finally 關(guān)鍵字。你可以在一個(gè) try/catch 塊的結(jié)束處添加這個(gè)關(guān)鍵字顷锰。執(zhí)行 try/catch 塊之后柬赐,無論是否有錯(cuò)誤發(fā)生并被捕獲或者try塊被完全執(zhí)行亡问,finally 塊總是被執(zhí)行官紫。
下面是一個(gè)例子:
function testTryCatch(value) {
try {
if (value < 0) {
throw "too small";
} else if (value > 10) {
throw "too big";
}
} catch (err) {
console.log("The number was " + err);
} finally {
console.log("This is always written.");
}
}
testTryCatch(-10);
testTryCatch(5);
testTryCatch(20);
效果顯示為: