JavaScript & jQuery 學習心得
在上完 Amos 老師的 HTML 與 CSS 後,第二門程式課程來到 Kuro 老師帶來的JavaScript & jQuery 前端開發入門實戰啦,這邊我稍微整理了一些老師上課的特色以及分享一些課堂上有講到的 JavaScript 觀念。
圖片來源:5xRuby
我自己在上這門課之前有簡單的接觸一點 JavaScript,起初,覺得跟 JavaScript 跟以前寫過的 C 蠻像的,有變數、陣列也有 function 等等。研究到後來開始有些更進階的觀念,和一些抽象的名詞我就看不太懂了,譬如閉包(Closure)、變數提升、立即函示 (IIFE)、bind、call 等等…我對這些 JavaScript 的特性總是似懂非懂,直到上了 Kuro 老師的課程後,終於瞭解了這些特性的原理!
記得第一次看到 Kuro 走進教室,他第一件事就是把教室的同學分成 2-4 個人一組,然後拿出他準備好的禮物(幾本 JavaScript 相關的書),只要在課堂期間回答問題、舉手發問都可以為小組得到分數,而老師所準備的所有禮物會送給那堂課分數最高的小組。
在課堂期間,老師也準備了許多的範例練習還有一些 JavaScript 的觀念問題,原本在做這些習題可能會有些無趣,不過在老師的課堂上,整個上課氛圍就像在玩遊戲一樣,我總是特別專注和興奮,希望可以把握每次機會幫小組得分,也因為這樣跟小組其他組員有更多互動,在這樣的環境下總覺得時間過得特別快,還沒回答到幾次問題,不知不覺中又到了課堂尾聲
圖片來源:五倍粉絲團
最後我們小組可能是比較活潑的關係,靠著踴躍舉手回答問題在最後得到了老師準備的獎品 以上就是老師上課特色的分享,再來介紹一些我覺得還蠻容易卡關的 JavaScript 觀念。下面這段 code 叫做立即函示 (IIFE),以前總是不太清楚什麼時候會需要用到這方法
( function(n) {
//code here...
} )(n)
// 假設想透過迴圈 + setTimeout 做到 // 每秒鐘將 i 的值 console 出
for( var i = 0; i < 5; i++ ){
window.setTimeout( function(){ console.log(i); }, 1000);
}
// 猜猜看結果?
(程式碼1)
打可以打開JS Bin試試看,你會發現原本期待可以印出0 1 2 3 4結果變成印出 5 5 5 5 5. 會印出55555是因為 JavaScript 是非同步執行的,所以在上圖的 for 迴圈裡面,在執行第一次
window.setTimeout( function(){ console.log(i); }, 1000);
如果換個方式寫
for( var i = 0; i < 5; i++ ){
// 將 i 當成 數傳入
(function(i){
window.setTimeout(
function(){ console.log(i); },
1000 * i);
})(i);
}
// 結果會是什麼?
(function(i){
window.setTimeout(
function(){ console.log(i); },
1000 * i);
})(i);
以上就是老師課堂上做的立即函數的示範,此外還有很東很棒的例子關於閉包(Closure)、變數提升、bind、call 等等.除了這些比較硬的觀念外,老師也有待我們用 JavaScript 做一些有趣的應用,像是寫一個樂透選號機 (圖3) 又或是用 Ajax 做一個動態查看 Youbike 的小網站(圖4)。這些應用練習讓我們在有趣環境下練習老師課堂中教過的 JavaScript 觀念,也讓我們熟練使用 JavaScript 時常會使用到的一些技巧~
圖片來源:Kuro 老師上課 ppt 實作後截圖 (圖3 樂透選號機)圖片來源:Kuro 老師上課 ppt 實作後截圖 (圖4 動態查看 Youbike)