六個 JavaScript 概念,真該掌握(不急,也可以慢慢來)
說實話,JavaScript 經常讓人摸不著頭腦。
它是唯一一個 [] == ![] 會返回 true,且 typeof null 居然是 "object" 的語言。可縱然如此,這門語言里有幾項核心知識點,一旦理解,就能讓你寫起代碼來更自信、更優雅,也少踩坑。
以下 6 個概念,前端/全棧開發者都該熟練掌握。別被“學術大雜燴”嚇到,它們都是實用到不行的必備技能。
1. 提升(Hoisting):為什么變量會莫名其妙地是 undefined
JavaScript 會把變量聲明和函數聲明“悄悄”搬到當前作用域的頂部——但只搬聲明,不搬賦值。
編譯前,代碼看起來像這樣:
console.log(foo); // undefined
var foo = 1;
在引擎眼里,實際執行順序等同于:
var foo; // 提升:先聲明
console.log(foo);
foo = 1; // 賦值
- **var**:聲明提升,初始化為 undefined
- **let/const**:同樣提升,但處于「暫時性死區」,直到執行到原始聲明處才可訪問
了解提升,才能不被 undefined 捉弄,也明白為何提前引用會報錯。
2. 閉包(Closures):讓函數帶走記憶
閉包就是函數加上它創建時的上下文——相當于給函數做了個“記憶背包”。即便父函數已經執行完畢,內部函數依舊能訪問那些變量。
function counter() {
let count = 0;
return function() {
return ++count;
};
}
const incr = counter();
console.log(incr()); // 1
console.log(incr()); // 2
為什么在乎?
- 這是實現緩存、柯里化、模塊化狀態的基石
- 你不必頻繁讀寫全局變量,就能優雅地管理私有狀態
3. this:它究竟指向誰?
this 的指向,完全取決于函數怎么被調用,而不是寫在哪里。
- 普通函數:this 指調用它的對象,若直接調用則為全局(非嚴格模式下)或 undefined(嚴格模式/模塊)
- 箭頭函數:沒有自己的 this,取其外部上下文的 this
例:
const obj = { name: 'Alice', greet: function() { console.log(this.name); }, arrowGreet: () => { console.log(this.name); }};obj.greet(); // "Alice"obj.arrowGreet(); // undefined(或窗口全局的 name)
記住這兩條,就能避免在回調和類方法里被 this 敲蒙。
4. 真值(Truthy)與假值(Falsy)
JS 里只有七個假值(false、0、''、null、undefined、NaN、document.all),其余都是真值。
if ('0') { console.log('真值!'); }
if ([]) { console.log('也是真值!'); }
搞清這些,寫起條件判斷來就不會再被“奇怪”結果坑。
5. 解構賦值(Destructuring):只取所需,別再翻半個對象
解構相當于對變量做「快速取值」。
const user = { name: 'Bob', age: 30, country: 'CN' };
const { name, country } = user;
console.log(name, country); // Bob CN
數組同理:
const [first, , third] = [10, 20, 30];
console.log(first, third); // 10 30
在 React props、函數參數里大量使用,讓代碼更簡潔、更聚焦。
6. 數組利器:map、filter、reduce
別再用 for 循環處理列表了。
- **map(fn)**:對每項運行 fn,返回新數組
- **filter(fn)**:只保留滿足 fn 的項
- **reduce(fn, init)**:把數組“折疊”成一個值
const nums = [1,2,3,4,5];
const doubled = nums.map(n => n*2);
const evens = nums.filter(n => n%2===0);
const sum = nums.reduce((acc,n)=>acc+n, 0);
它們讓操作聲明式、意圖清晰,也更容易組合鏈式調用。
總結
不需要記住 JS 的每個怪異細節,但以上六大概念,絕對能讓你對這門語言的運行機制更明了。掌握它們,寫出的代碼更可預測、更穩健,也更易維護。
如果有些點還沒完全搞透,別急:慢慢來,實踐中領悟才最牢固。