iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 8
1
自我挑戰組

Head First!從頭開始學JS 《深入淺出 JavaScript 程式設計》讀書筆記系列 第 8

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))。之後有機會再詳細介紹。

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

本文同步發表於cichen


上一篇
Day07. JavaScript的傳遞只是開分身帳號而已
下一篇
Day09. 臨兵鬥者皆陣列在前!JavaScript:你錯棚囉!
系列文
Head First!從頭開始學JS 《深入淺出 JavaScript 程式設計》讀書筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言