作用域链的一些小理解
2017-04-08 本文已影响0人
闇哨
函数中的变量作用域链
首先看一段代码;
<script type="text/javascript">
function ad(){
var a=3;
ap();
function ap(){
console.log(a)
}
}
ad();//输出的结果为3;
</script>
以上代码并不想去考虑 这个边量a 在做用域链中的位置 我们只讨论他是否在作用域链内部,根据结果a是在ap的函数链内部下面图解a的位置
ap.png;
再看零一段代码
var a='window';
function ad(){
var a=3;
ap(); //这个时候输出的结果为 window
}
ad();
function ap(){
console.log(a)
}
那这时候有人会问了 调用ap的时候不是ad函数的内部吗为什么返回的值不是a
ap.png
根据上面的图可清晰的认识到ad 和ap是同属于window下的方法ap无权访问ad内的变量所这里的a的值为‘window’;
那么看另外一段代码
var a='window';
function ad(){
var a=3;
function ap(){
console.log(a)
}
}
ad();
ap();//报错;
显而易见之二段代码是在外部想要访问函数ad内部的 函数ap显然这是不现实的 因为函数ap在ad内部相当于一个局部变量。这里要注意的石函数的声明提前也只能在他的所在的作用域内提前并不能越级提前到他的作用域外部;