高级软件工程师(邹华栋)作用域讲解

var tt = 'aa';
function test() {
   alert(tt);
   var tt = 'dd';
   alert(tt);
}
test();
起初看这段代码的时候认为执行的结果应该是
aa dd

运行之后才知道不是的,传智博客邹华栋老师给给讲解如下
1.当test方法执行的时候,将会产生test方法的执行环境
2.test执行难个环境中生成了test方法的作用域链
作用域链先包含了当前test方法的所有成员,就包含了方法里面的tt
这个tt在作用域链的最顶端接着这个作用域链加入了window的作用域
那么window的作用域包含了外面声明的tt
那么当test方法执行的时候第一个alert tt的时候浏览器js执行会顺着text的作用域链栈tt,
那么最先是从test方法的作用域中找到了tt,所以,但是这个test方法的tt还没赋值,所以就是undefine
紧接着tt=dd;在alert的时候,就打出了tt了。所以,这个方法里打印的tt就是test方法内部的tt和全局的tt木有关系

var a = 10;
function test() {
   a = 100;
   alert(a);
   alert(this.a);
   var a;
   alert(a);
}
test();
此代码的分析过程
方法里的this简单来说就是,谁 . 出 这个方法,这个方法里的 . 就是谁;
但是方法里的this可以通过call直接修改,也就是说,我可以在外面传一个值给this
比如 window.alert() 那么 alert方法里的 this就是window如果这么调用 alert.call(1)那么,此时alert方法里的this就等于 1
是现在当前方法的作用域里找,找不到,在到全局作用域里去找

此段代码执行结果以及js作用域链相关内容请看http://www.wenlele.com:8081/View-6-765.aspx

http://www.2cto.com/kf/201107/97296.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值