一、var的基本語法

var是JavaScript中用於聲明變量的關鍵字,語法如下:

var 變量名 = 初始值; // 聲明並初始化
var 變量名; // 聲明但不初始化

二、var的主要特性

1. 函數級作用域

var聲明的變量具有函數級作用域,而不是塊級作用域(如if、for等語句塊)。

function testVar() {
    if (true) {
        var x = 10; // 在整個函數內都可用
    }
    console.log(x); // 輸出10,而不是報錯
}
testVar();

2. 變量提升(Hoisting)

使用var聲明的變量會被"提升"到函數作用域頂部,但初始化保持在原位置。

console.log(a); // 輸出: undefined
var a = 5;
console.log(a); // 輸出: 5

等價於:

var a; // 聲明被提升
console.log(a); // undefined
a = 5; // 初始化保持在原位置
console.log(a); // 5

3. 可重複聲明

使用var可以對同一個變量多次聲明,後面的聲明會覆蓋前面的聲明。

var message = "Hello";
var message; // 合法,但不會改變message的值
console.log(message); // 輸出: "Hello"

var count = 5;
var count = 10; // 合法,覆蓋之前的值
console.log(count); // 輸出: 10

三、var的使用示例

1. 聲明變量並初始化

var age = 25; // 聲明並初始化
var name = "John"; // 字符串類型
var isStudent = true; // 布爾類型
var price = 9.99; // 數值類型

2. 聲明多個變量

var x = 1, y = 2, z = 3; // 聲明並初始化多個變量
var a, b, c; // 聲明但不初始化
a = 10;
b = 20;
c = 30;

3. 聲明變量後賦值

var score;
score = 85; // 賦值
console.log(score); // 輸出: 85

4. 未使用var聲明變量(全局變量)

function test() {
    name = "Alice"; // 未使用var,創建全局變量
}
test();
console.log(name); // 輸出: "Alice"
console.log(window.name); // 輸出: "Alice"(在瀏覽器環境中)

四、var的注意事項

  1. 避免在函數內部不使用var直接賦值:這會創建全局變量,可能導致難以調試的問題。
  2. 變量提升可能導致意外行為:由於變量聲明被提升到作用域頂部,代碼執行順序與書寫順序不一致。
  3. 在ES6之後,推薦使用let和const:var的函數作用域和變量提升特性在現代JavaScript開發中容易導致問題,let和const提供了更好的作用域管理。

五、var vs let vs const

特性

var

let

const

作用域

函數級

塊級

塊級

變量提升




重複聲明

允許

不允許

不允許

重新賦值

允許

允許

不允許