現在讓我們談談這段時間 你們一直在使用的東西: 函數 每當你使用指令時,像是 rect() 或 fill() 或 text() 你就在召喚函數 而那些函數依照你的指令去繪圖 函數到底是什麼? 它是一連串我們集合起來 並給予名稱的程式碼 因為我們想能夠多次地 重複使用哪一點功能 想一想 rect() rect() 做的是什麼? 它畫出四條線,對吧? 我們也可用 line() 函數 做出相同的,是吧? 而我們也能得到一個貌似矩形的繪圖 但是我們發現 我們也想能夠多次繪畫矩形 如果每次都要計算怎麼 從一個角落畫直線到另一個角落 再從一個角落到另一個角落 就會變得很惱人 與其那樣 我們不如寫一個 rect() 函數 而該函數做的正正就是這 跟那四行編碼做的一模一樣 只是所需的碼少很多 那還蠻酷的 而 rect() 是其中一個在可汗學院 所有學習課程中都可使用的函數 但是,你也可以在你的程式裏 寫自己的函數 例如:我們設計一個程式 讓我們能多次繪製溫斯頓 說不定說個有關他的生命故事 然後展示出他人生裏的 每個年齡階段 所以我們的溫斯頓繪製碼是可能是這樣: 我們有 faceX 和 faceY 變數 來儲存臉的中心位置 然後我們畫上眼和嘴 相對著那些變數 現在程式可以看到編碼 它不是在任何函數中 所以會直接執行 而且只執行一次 好的,把它變成一個函數 這一步很似我們宣告變數的步驟 因為其實那正是我們在做的 所以我們寫 var drawWinston 幫它取個好名字,高描述性 然後一個 = 但在這,我們不寫一個數字或一個字串 而直接寫 function 確定你拼對 之後一個空白括號 () 然後一個開花括號 { 再一個關花括號 } 和最後的分號 ; 很好,我們需要做的是 將我們想要的所有東西 放進函數的開和關花括號之間 我們就把所有編碼放進去 放它進我們的函數裏 排好內縮,然後 噔噔! 現在我們有的便是這變數 它存着一個函數 也就是說我們給了 這編碼區塊一個標籤 以便我們於任何時間告訴我們的程式: 嘿!找出那個有標籤的 編碼區塊然後執行它! 我們正令這編碼變得可再用 但注意,我們現在沒有任何溫斯頓! 我們丟了溫斯頓! 他跑了去哪裡? 好的,當我們放這於函數裏 我們便告訴了程式: 嘿,這裡有一堆程式碼 我想稍後能夠執行 但只當我叫你去執行時才動手 我們需告訴它去執行程式碼 就是指我們需召喚函數 就如我們執行ellipse() 和 rect() 和 line() 時一樣 我們寫下函數名稱 drawWinston 隨後接上一個括號 () 當然還有分號 ; 噔噔! 我們有個溫斯頓了! 好,我覺得它很酷 但你可能不覺它很酷 因為我們做的一切 就是程式做它之前就會做的 有點好笑吧? 函數的用意就在於重複使用 現在就來試試 我們可以復製貼上這函數召喚 噔噔!噔噔! 一遍又一遍地 嗯,但看起來好像一樣 喔,成功了 它繪出了許多溫斯頓 但問題是它們全在同一個地方 如果我們有X光眼的話 就是可以看穿畫布 看見三個溫斯頓 但我沒有X光眼 (我不知道你) 但是,我們可以對函數 做一些小小的改變 讓它現身 你看 faceX 和 faceY 它們永遠都是202 和 208 我們可利用 函數 random() 來改變這 要不 random() 從 50 到 350 它便會隨機產生一個 於那兩數之間的數字 我們可以在這做一樣的 所以每當這函式被召喚時 它便會產生這新的隨機數 如果我們按 restart 我們便可得到隨機溫斯頓 太厲害了! 好,我覺得這很酷因爲 如果我們沒有擺它在函式裏 原本該需要一大堆編碼來寫這 本來會有三倍的程式碼 不過目前仍然不是它用處的極致 因爲我們大概不想要隨機溫斯頓 我們也許想能夠放將溫斯頓 在螢幕上一個固定的地方 所以請密切留意 因爲我們將講解 如何傳遞參數給函數 而你便能學會做那