=波波日志 > JavaScript/Ajax > javascript 作用域链分析=
[转]javascript 作用域链分析
+展开
-JavaScript
var a = 10;
function test() {
a = 100;
alert(a);
alert(this.a);
var a;
alert(a);
}
test();
function test() {
a = 100;
alert(a);
alert(this.a);
var a;
alert(a);
}
test();
对于上述代码中test函数的作用域链的形成过程:
step:1
[[scope]] = {
{
a: undefine,
test: undefined,
document: ...,
location: ...,
}
}
step2:
[[scope]] = {
{
a: 10,
test: undefined,
document: ...,
location: ...,
}
}
step43:
[[scope]] = {
{
a: 100,
},
{
a: 10,
test: undefined,
document: ...,
location: ...,
}
}
[[scope]] = {
{
a: undefined,
},
{
a: 10,
test: undefined,
document: ...,
location: ...,
}
}
2. 先对全局进行语法分析,将var 变量及 function建立作用域链,分别对应varDecls和funcDecls,同时对应funcDecls还会创建函数对象,将varDecls加入到 funcDecls的scope中。再对全局执行(如此时有赋值操作即会执行);再根据调用情况建立调用对象,将全局对象的作用域链加入到调用对象的作用域中,对函数内部的变量或者内部函数定义进行语法分析,语法分析完成后再进行函数的执行,如此进行循环。这样便组成作用域链,从内层到外层。一定要记住先语法分析(定义),再执行(执行的过程中就直接查找已经行成的作用域链,如若变量定义在alert后,则先将输入undefined),先外后内。
3. 预编译干的事可以理解为将一些作用域链保存入栈,在运行阶段才开始去执行函数。
类别:JavaScript/Ajax 作者:转载 日期:2011-08-13 【评论:0】
相关文章
暂时没有评论!
发表留言
热门博文
- AJAX跨域问题解决办法
- ajax问题总结
- jQuery dataType指定为json的问题
- ajax+asp.net+mssql无刷新聊天室
- ajax无刷新上传文件,使用iframe模仿
- ajax对象abort方法
最新博文
- jquery+flash显示图片实时加载进度插件
- jquery浮动层拖动插件
- firefox NPMethod called on non-NPObject wrapped JSObject!错误
- IE浏览器setCapture和releaseCapture介绍
- 51.la统计出问题了
- 隐藏删除ckeditor状态栏
随机博文
- AJAX项目中在IE浏览器上遇到"Internet Explorer无法打开站点,已终止操作"错误解决方案
- JavaScript如何调用调用flash中的方法
- 判断访问者的浏览器是否支持JavaScript和Cookies
- 图片无间隙滚动
- FCKeditor模板DIY
- Javascript跨域和Ajax跨域解决方案
广告商赞助

