2014年3月1日 星期六

閉包 Closures - 高階函式 Higher-order functions

高階函示 : 
1. 把其他函式當作引數 (callback function / 回呼函式, 即呼叫時傳入她, 然後她再呼叫回來)
2. 會回傳函式

  • 使用標準程式庫原本的方法

var nums = [1,3,5,7,9,8,6,4,2];
nums.sort(function(x,y){
  if(x<y) return -1;
  if(x>y) return 1;
  return 0;
});
console.log('nums = ' + nums);
 
var names = ['Ian','Peter','Kevin'];
names = names.map(function(name){
    return name.toUpperCase();
});
console.log('names = ' + names);

顯示 :
nums = 1,2,3,4,5,6,7,8,9
names = IAN,PETER,KEVIN


  • 自訂高階函式

// 依照條件建立字串
function buildString(n, callback) {
    var result = '';
    for (var i = 0; i < n; i++) {
        result += callback(i);
    }
    return result;
}
 
// 建立 a~z
var aIndex = 'a'.charCodeAt(0); // 97
var alphabet = buildString(26, function (i) {
    // 這個 callback function 會被執行 26 次, i 接收到的是在 for 迴圈內丟給 callback function 的值, 所以會得到 0 ~ 25
    return String.fromCharCode(aIndex + i);
});
console.log('alphabet = ' + alphabet);
 
// 建立 1~9
var digits = buildString(9, function (i) { return i + 1; });
console.log('digits = ' + digits);
 
// 建立4個亂數
var random = buildString(4, function () {
    return Math.floor(Math.random() * 10);
});
console.log('random = ' + random);

顯示 :
alphabet = abcdefghijklmnopqrstuvwxyz
digits = 123456789
random = 7406



沒有留言: