深层理解javascript作用域
<script>
function a() {
var aa = 123;
function b() {
var bb = 234;
console.log(aa);
}
return b;
}
var res = a();
res();
</script>
在创建函数前都会有预编译,同时也会创建一个ao对象,在这里,先是预编译a函数,创建了a函数的ao对象,a函数执行时会先定义b函数,这时b函数定义创建一个ao对象,
这两个ao对象会被保存到一个隐式属性【scope】这个属性中去,这个属性访问不到,却真实存在,b函数会看到b函数外面a函数所创建的aa变量,这时a函数执行完后,a函数作用域链消失,b函数被res变量保存了,b函数单独拿出来也能看到a函数创建的aa变量,这也解释了闭包的原理,
总的来说,我感觉就是a函数不能访问b函数定义的变量,b函数则可以访问a函数定义的变量。
b函数会先在自己的ao中招变量,找不到才回去父ao中找,找到的话会立刻停止不会向上找了