- 作用域链理解:
函数中使用某个变量时,优先在自己的作用域中查找;
如果找不到,就会向上一层作用域查找;
如果找不到,继续向上一层作用域查找,直到全局作用域;
如果还找不到,则报错。
- 实例:
<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的声明赋值语句,打印结果是报错。