什么是作用域链
其实了解了作用域快,你学习作用域链的时候,你就会接受快很多,
当a 创建函数的时候,分为两部
1,先定义 ---- 会产生一个 [[scope]] 这个东东就是用来装 作用域的集合的,在scope里面生成一个go 全局的 变量环境
2,后执行 ---- 执行的a的时候,会在函数内部 [[scope]] 创建一个 ao 这个ao就是装函数内部变量的。
然后定义b 在执行b
定义b函数的时候,也会产生一个 [[scope]] 这个时候会继承 a ao 和 全局 go ,执行b函数的时候会产生 内部 [[scope]] 的 新的 b.ao 继承 a.ao 全局go
执行c的时候,跟b的情况一样,我这里就不写了,这多是一些理念性的东西。
function a(){ function b(){ console.log(cc); function c(){ var cc=123; } c() } b() } a(); a undefind a[[scope]] ==> go a doing a.[[scope]]==> 0 a.ao: 1 go b undefind b[[scope]] ==> 0 a.ao 1 go b doing b[[scope]] ==> 0 b.ao 1a.ao 2go c undefind c[[scope]] ==> 0 a.ao 1 b.ao 2 go c doing c[[scope]] ==> 0 c.ao 1 a.ao 2 b.ao 3 go
网友评论