引子
長(zhǎng)久以來一直都沒有專門學(xué)過 JS ,因?yàn)橹坝凶约嚎羞^ C++ ,又打過一段時(shí)間的算法競(jìng)賽(寫得一手好意大利面條),于是自己折騰自己的網(wǎng)站的時(shí)候,一直都把 JS 當(dāng) C 寫。但寫的時(shí)候總會(huì)遇到一些奇怪的問題,于是打算花點(diǎn)時(shí)間看了看《你不知道的JavaScript》。寫這篇文章以記錄一下一段時(shí)間的學(xué)習(xí)內(nèi)容,也治療一下我不愛做筆記和總結(jié)的毛病。如果你也是一直按著別的語言的編程習(xí)慣來寫 JS 而沒有專門去了解過它,不妨一起來了解一下 JS 的一些獨(dú)特之處。
首先來看一段代碼:
console.log("Firstly, i = " + i);// console.log("BTW, a = " + a);i = 61;console.log("Then there it got a value, i = " + i);for(var i = 1; i <= 5; i++) { console.log("In for loop, i = " + i);}console.log("At the end, i = " + i);
你可能注意到,這段代碼一開始就要輸出 i 的值,而在輸出之前我們似乎并沒有寫任何聲明和定義 i 值的語句,而再之后,我們給 i 賦了一個(gè)值,但我們依然沒有用 var 之類的關(guān)鍵字來做變量聲明的工作。在for循環(huán),我們終于聲明了 i ,但 for 循環(huán)之后,我們依然在試圖使用 i 。這些代碼看上去都很荒唐,或許你可能認(rèn)為這段代碼在第一行的時(shí)候就會(huì)報(bào) ReferenceError 以提示我們并沒有定義變量 i 并停止執(zhí)行。但實(shí)際真的是這樣嗎?