iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 22
1

本日閱讀進度:第十章 一級函式(442~464頁)

重點摘要:

  1. 一級函式
    在JavaScript中,我們對其他值所能做的任何事情,對函式也能做。
    你可以對函式做以下操作:
  • 將它賦值給一個變數(或是將它存入陣列或物件之類的資料結構)(昨天已經介紹過)
  • 將函式傳遞給一個函式
  • 從一個函式回傳函式
  1. 將函式傳遞給函式
    以書中的測驗為範例,大家可以想想答案是什麼,正確答案公布在最下方。
//我們建立了一個函式,並把它賦值給名為fun的變數。
function fun(echo) {
  console.log(echo);
};

//#1
fun("hello");

//#2
function boo(aFunction) {
  aFunction("boo");
}
boo(fun);

//#3
fun(boo);

//#4
var moreFun = fun;
moreFun("hello again");
  1. 從函式回傳函式
    借用書中空服員幫乘客點飲料的範例:
function createDrinkOrder(passenger) {
  var orderFunction;  // <-建立一個變數,用於保存我們想要回傳的函式
  if (passenger.ticket === "firstclass") {
    orderFunction = function() {
      alert("Would you like a cocktail or wine?");
    };
  } else {
    orderFunction = function() {
      alert("Your choice is cola or water.");
    };
  }
  return orderFunction;  // <-回傳函式
}

function serveCustomer(passenger) {
  var getDrinkOrderFunction = createDrinkOrder(passenger);
  getDrinkOrderFunction(); // <-需要讓乘客點飲料的時候,就使用此函式
}
// getDrinkOrderFunction 比 createDrinkOrder簡單,前者只會顯示警示訊息來詢問乘客點飲料的問題。
  1. 陣列sort方法的工作原理
    JavaScript陣列所提供的sort方法,需要被傳入一個函式,該函式知道如何比較陣列中的兩筆資料項,以利陣列的排序。
    如以下範例:
var numberArray = [60, 50, 62, 58, 54, 54];

function compareNumbers(num1, num2) {
  if (num1 > num2) {
    return 1;
  } else if (num1 === num2) {
    return 0;
  } else {
    return -1;
  }
}

numberArray.sort(compareNumbers);
console.log(numberArray);
// [50, 54, 54, 58, 60, 62]

第2項的答案:

  1. hello
  2. boo
  3. function boo(aFunction) {aFunction("boo");}
  4. hello again

本文同步發表於cichen


上一篇
Day21. 函式宣告和函式運算式
下一篇
Day23. 醒醒吧,你根本沒有名字!
系列文
Head First!從頭開始學JS 《深入淺出 JavaScript 程式設計》讀書筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言