作用域链经典问题
<script> function fn1(){ var i="a"; function fn2(){ i="b"; function fn3(){ i="c"; } fn3(); } fn2(); console.log(i); } fn1(); </script>
结果:c
解析如下:牢记作用作用域链四条原则
1、 当对一个变量产生引用时,要遵循作用域链原则。尝试引用一个变量,先在当前作用域寻找该变量的声明语句(var 变量名)。有,直接使用该变量。
2、 如果没有,继续向上一级作用域寻找var声明语句。有,直接使用
3、 如果还是没有,继续向上一级作用域寻找var声明语句。有,直接使用
4、周而复始,直到查询到全局作用域,依然没有var声明语句,系统会隐式(自动)地创建该变量的声明语句