- 作用域鏈理解:
函數中使用某個變量時,優先在自己的作用域中查找;
如果找不到,就會向上一層作用域查找;
如果找不到,繼續向上一層作用域查找,直到全局作用域;
如果還找不到,則報錯。
- 實例:
<script type="text/javascript">
var a = 9;
function func1(){
var a = 8;
function func2(){
var a = 7;
function func3(){
var a = 6;
console.log(a);
}
func3();
}
func2();
}
func1();
</script>
調用func1,即執行func1的代碼塊,func1的代碼塊是聲明並賦值變量a(作用域是函數func1中),聲明func2,並調用func2;
調用func2,即執行func2的代碼塊,func2的代碼塊是聲明並賦值變量a(作用域是函數func2中),聲明func3,並調用func3;
調用func3,即執行func3的代碼塊,func3的代碼塊是聲明並賦值變量a(作用域是函數func3中),並打印變量a。
func3作用域中聲明並賦值了a變量,所以打印結果是6;
註釋掉func3作用域中變量a的聲明賦值語句,打印結果是7;
註釋掉func2作用域中變量a的聲明賦值語句,打印結果是8;
註釋掉func1作用域中變量a的聲明賦值語句,打印結果是9;
註釋掉全局作用域中變量a的聲明賦值語句,打印結果是報錯。