注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Mr.7

我将骄傲的活在这个大唐盛世

 
 
 

日志

 
 

js原理之作用域链Scope,ScopeChain  

2014-05-02 12:50:41|  分类: 挨踢咋活 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

真正了解封装,了解闭包;需要了解作用域,作用域链;对应的概念还有执行器上下文,活动变量,脚本的解析和执行过程。

总算有一点进步,因为知道内层的这么多概念。可是即便这些概念,最后融会贯通恍然大悟,也需要经历过好几步:最会有概念大爆炸的混沌期,大概知其然的大纲期,最后深入细节的来龙去脉期。这是需要一个看很多,然后深入浅出的过程。我在这其中,也只是进去,但是还没有明白的出来。虽然可以识得方方面面的错误,但是还没有建立一个自己能明白的模型。哎,都怪很多人都提出了自己的模型;但是这些模型,却不能解决各方面的问题。也许,只有深入到一个JS引擎的源代码中,才能豁然开朗。

1.混沌期

1.1 代码的可重用性

如下面,每次执行函数f(),难道都是从头到尾的解释执行。这样太低效了吧?

void f(args)
{
}
var f1=f();
var f2=f();

所以这里一定有一个代码段的概念。只解析一次,后期的使用会省事很多。对应着就是至少抽象语法树AST可以使用,至于有没有类似静态编译型语言的代码段概念,那就再说!

1.2 Scope和Scope Chain的区别

按照一些书的介绍,会引出[[Scope]]和[[Scope Chain]]的概念。以为很简单嘛,Scope Chain就是Scope的链表。可是再深究一下,Scope是静态创建时就决定的,而Scope Chain却是动态执行时才确定。如何保持静态和动态之间的说法平衡呢?

此外,[[Scope Chain]]的实现方式也有两种。一种是类似原型链Prototype的指引继承;另一种说法是每个Scope Chain拥有全部的Scope。

再深入一点,Scope Chain只是ExecuteContext执行期上下文的一部分。而执行期上下文包括三大要素:活动变量、ScopeChain和this。其实这只是逻辑上的表述。实质上本质都是活动变量。ScopeChain是执行基类的活动变量。

1.3 代码的编译和执行

代码,特别是函数,在整个js引擎过程中实际上包括两个过程:创建过程和执行过程。而执行时,是基于创建解析的基础上进行执行。

最后一切都归结为代码的解析。解析时,对于函数,归结为语法树的构建:也就是变量的识别。一个函数内部声明的变量就是活动对象,而毕竟还有些非声明直接使用的变量,其实就是作用域链。

2.百家学派

http://blog.csdn.net/aspdao/article/details/5448004
一个使用·模型来破解作用域原理的文章。不在乎观点正确,主要是学习方法很管用。基于此基础,里面有几个细节没有理解清楚。其它的都很明白。
注意:里面有关活动变量构建时,形参和内部参数同名的情况,解释的比较清楚。不过这种情况,就像茴香豆的多种写法一样,不建议。

http://www.cnblogs.com/RicCC/archive/2008/02/15/JavaScript-Object-Model-Execution-Model.html
这个学习方法也不错。不局限于js的执行模型,而是全部js的内部原理。

http://blog.csdn.net/yueguanghaidao/article/details/9568071
这个对scope和scopechain的用法层面的认识有一定的帮助。
  评论这张
 
阅读(503)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018