什么是作用域
作用域(scope)指的是變量存在的范圍忱屑,在ES5的規(guī)范中母债,Javascript只有兩種作用域:一種是全局作用域,變量在整個程序中一直存在笋妥,所有地方都可以讀劝米颉;另一種是函數(shù)作用域春宣,變量只在函數(shù)內(nèi)部存在酵颁。
全局變量與局部變量
- 函數(shù)外部聲明的變量就是全局變量(global variable),它可以在函數(shù)內(nèi)部讀取
var a= 1;
function f() {
console.log(a);
}
f() // 1
- 在函數(shù)內(nèi)部定義的變量月帝,外部無法讀取躏惋,稱為“局部變量”(local variable)
function f() {
var a = 1;
}
a // ReferenceError: a is not defined
- 函數(shù)內(nèi)部定義的變量,會在該作用域內(nèi)覆蓋同名全局變量
var a = 1;
function f() {
var a = 2;
console.log(a);
}
f() // 2
a // 1
作用域鏈
JavaScript上每一個函數(shù)執(zhí)行時嫁赏,會先在自己創(chuàng)建的AO上找對應(yīng)屬性值其掂。若找不到則往父函數(shù)的AO上找,再找不到則再上一層的AO,直到找到大boss:window(全局作用域)潦蝇。 而這一條形成的“AO鏈” 就是JavaScript中的作用域鏈款熬。