JavaScript 整理筆記(五)
阿新 • • 發佈:2019-01-06
1.3 函式
1.3.4 引數
函式呼叫時,會得到一個 arguments 陣列(類似陣列,只擁有 length 屬性),即呼叫函式時傳入的引數。
例:
var sum = function(){
var s = 0;
for(int i = 0; i < arguments.length; i++){
s += arguments[i];
}
return s;
}
sum(1, 2); // 3
sum(1, 2, 3); // 6
1.3.5 返回
一個函式總是會返回一個值,如果沒有指定return的值,則會返回 undefined。 例: var a = function(){ return "a"; }; a(); // "a" var b = function(){}; b(); // undefined
1.3.6 異常
var add = function(a, b){ if(typeof a !== "number" || typeof b !== "number"){ throw { name: "TypeError", msg: "Not A Number" }; } return a + b; } throw 語句中斷函式的執行後丟擲一個 exception 物件,該物件會被一個 try...catch 語句捕捉到: var tryCatchFn = function(){ try{ add("a", 1); } catch(exception){ console.log(exception.name + ": " + exception.msg); } } tryCatchFn(); // TypeError: Not A Number
1.3.6 擴充型別的功能
JavaScript 允許給基本型別擴充功能。如給 Object.prototype 新增方法。 例: Function.prototype.create = function(name, func){ // 建立方法前先判斷是否有該方法存在 if(!this.prototype[name]){ this.prototype[name] = func; } return this; } 建立一個轉換為整數的函式: Number.create("integer", function(){ return Math[this < 0 ? "ceil" : "floor"](this); }); (-4 / 3).integer(); // -1 建立一個去掉字串前後空格的函式: String.create("trim", function(){ return this.replace(/^\s+|\s+$/g, ""); }); " abc ".trim(); // "abc"
1.3.7 遞迴
遞迴函式就是直接或間接呼叫自身的一種函式。如計算斐波拉切數列:
var fibonacci = function(n){
if(n == 1 || n == 2){
return 1;
} else {
return fibonacci(n - 1) + fibonacci(n - 2);
}
}
fibonacci(6); // 8
// fibonacci(5) + fibonacci(4) =>
// fibonacci(4) + fibonacci(3) + fibonacci(3) + 1 =>
// fibonacci(3) + 1 + 1 + 1 + 1 + 1 + 1 =>
// 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 =>
// 8
fibonacci(10); // 55
1.3.8 作用域
作用域是指變數再某個程式碼塊中的可見性,減少了命名衝突:
var fn = function(){
var a = 1;
var b = 2;
var fn2 = function(){
var b = 3;
var c = 4;
a += c;
// a = 5; b = 3; c = 4;
};
// a = 1; b = 2; c 未定義
fn2();
// a = 5; b = 2; c 未定義
};
函式 fn 中定義的變數在 fn2 中都是可見的,這個要注意在函式 fn2
中使用 fn 函式的變數要非常小心,最好的辦法就是在函式體的頂部
宣告函式可能用到的所有變數。
——–內容繫個人整理,如有錯誤,歡迎指出。謝謝!——–