「這是我參與2022首次更文挑戰(zhàn)的第3天,活動詳情查看:2022首次更文挑戰(zhàn)」
寫在前頭
大多數小伙伴看技術書籍都會用“啃”來描述讀書的直觀感受,當然我也是一個前端小白贬养,白的透明那種,但是我在讀技術書籍感覺到“啃”的時候植影,我希望把我啃紅寶書第四版的過程的想法褂乍,總結帶給大家帖渠,以供后來者能夠更快上手尤溜。
注: 本文由于作者水平原因倔叼,如有錯誤之處,懇請大家指正,另外隨著學習的深入宫莱,體會的加深丈攒,我會不斷回來更新,修改這類文章授霸。
思維導圖
脈絡 (本篇只包含3.3. 變量之3.3.1var關鍵詞)
這小節(jié)其實核心就是介紹了var肥印,let,const 這3個變量的關鍵字绝葡,以及平時的聲明風格,實踐腹鹉。
本篇先寫var關鍵詞
3.3. 變量
3.3.1var
- 定義變量類型不固定
簡單來說就是使用var關鍵詞聲明的變量可以存任何類型的值藏畅,就是一個盒子而已。
var name = '張三';
name = 1; // 依然是合法的功咒,但是不推薦這么做
- 函數作用域
作用域在后面章節(jié)會介紹到愉阎,這里就簡單理解為一個函數{}里面的所有內容。
簡單來說就是使用var聲明的變量力奋,只有在包含這個變量的函數作用域里面有效榜旦。其他地方使用會報錯。
function sayHi() {
var say = 'hi';
console.log(say);
}
sayHi(); // 調用函數 輸出hi景殷。
console.log(say); // 報錯
- 聲明提升
就是說可以先上車后補票溅呢, 先用這個變量,后面在聲明也可以猿挚。var聲明的關鍵詞咐旧,他會自動把聲明的變量提升到函數作用域的頂部。
function sayHi() {
console.log(say);
var say = 'hi';
}
sayHi(); // 調用函數 輸出undefined绩蜻。
為什么不輸出hi铣墨?因為var聲明的變量只會提升聲明,并不會把賦值也提升了办绝。上面的代碼和下面的代碼等價伊约。
function sayHi() {
var say
console.log(say);
say = 'hi';
}
sayHi(); // 調用函數 輸出undefined。這個時候say還沒有被賦值孕蝉,自然就是undefined
補充:已經聲明的變量且為賦值屡律,那么他的值默認是undefined。
- 重復聲明
多次使用var關鍵詞聲明同一個變量降淮,都會合并為一次聲明這個變量疹尾,賦值以最后一次為準確。
function say() {
var say = 'hi';
var say = 'Hi';
var say = 'Hello';
console.log(say);
}
say(); // 調用函數輸出 Hello
三次var聲明合并,最后是 var say = 'Hello';
- 省略var關鍵詞纳本,聲明窍蓝。
當省略var 關鍵詞直接書寫一個變量名 會被視為是全局變量。并且在嚴格模式(另外一直JavaScript解析和執(zhí)行模型)這樣會報錯繁成。
function say() {
say = 'hi'; // say 是全局變量吓笙,在函數作業(yè)域外依舊起作用
console.log(say);
}
say(); // 調用函數輸出 hi
console.log(say); // 輸出hi