Day08. 要五毛給一塊,你說JavaScript奇怪不奇怪

Day08. 要五毛給一塊,你說JavaScript奇怪不奇怪

補充一下JavaScript的引數傳遞,昨天說是pass by value,但書中提到會有例外的情況,之後學到物件的時候再來探討這個問題。

本日閱讀進度:第三章 介紹函式(94~114頁)

重點摘要:

1.傳入的引數數量不對時

在寫Ruby的時候,如果傳入的引數和參數數量不一致,馬上就會噴錯,說我預期OO,你傳給我XX。

據說JavaScript在設計上為了不讓使用者信心崩潰,總是盡量能不噴錯就不噴錯,不過有時侯這樣的貼心讓人更摸不著頭緒了。

狀況1:傳入的引數不足

未對應到引數的參數會被設置成未定義。

function makeTea(cups, tea) {
  console.log("Brewing " + cups + " cups of " + tea);
}
makeTea(3);
//"Brewing 3 cups of undefined"

狀況2:傳入的引數太多

多出來的引數會被忽略。

function makeTea(cups, tea) {
  console.log("Brewing " + cups + " cups of " + tea);
}
makeTea(3, "Earl Grey", "Hello");
//"Brewing 3 cups of Earl Grey"

狀況3:沒有任何參數時

這是OK的,許多函式沒有參數,但圓括號還是要記得加上。

function barkAtTheMoon(){
  console.log("Woooooooooo!");
}
barkAtTheMoon();
//"Woooooooooo!"

2.作用域、全域變數與區域變數

  • 變數可以被使用的地方稱為作用域(scope)。

  • 若變數被宣告在函式之外,則它是一個「全域變數」(global variable),可以在程式碼中任何地方使用它。若變數被宣告在函式之內,則它是一個「區域變數」(local variable),只能在函式裡面使用它。

  • 如果在使用一個變數之前,忘了宣告它,則它將會是一個「全域變數」。

  • 如果全域變數和區域變數有相同的名字,則全域變數會被區域變數遮蔽。

  • JavaScript總是會在函式的開頭建立所有的區域變數,無論你是否有宣告它們(這稱為「提升」(hoisting))。之後有機會再詳細介紹。

函式其實還有滿多可以說的,不過剛開始入門就先挑幾個重點囉!明天要進入「陣列」的世界,敬請期待!

本文同步發表於iT邦幫忙

Recent post