Javascript中作用域和上下文

函数可以被多个上下文所使用,作用域可以被封装或保护。每一个函数调用都联系着一个作用域和一个上下文。根本上说,[b]作用域是基于函数的而上下文是基于对象的[/b]。
先看几个术语的解释:

[size=medium][b]变量作用域[/b][/size]

变量能够被定义在局部或者全局作用域,这导致运行时变量的访问来自不同的作用域。
全局变量:声明在函数体外,在整个运行过程中都存在,能在任何作用域中访问和修改。
局部变量:仅在函数体内定义,每次被调用都将产生一个新的作用域。

另:ES6中支持通过let关键字定义块作用域变量。

[size=medium][b]“this”上下文[/b][/size]
上下文决定一个函数是怎么被调用的。当一个函数作为一个对象的方法被掉调用时,this指向调用这个方法的对象:
var object = {
foo: function(){
alert(this === object);
}
};
object.foo(); // true

函数作为未绑定对象被调用时,this默认指向全局上下文或者浏览器中的window对象。严格模式下被执行,上下文将被默认为undefined:

[size=medium][b]执行上下文(execution context)[/b][/size]

每次一个新的执行上下文被创建时,它都被添加到了作用域链(有时它也被称为执行栈或者调用栈)的顶部。浏览器总是执行当前位于作用域链顶部的执行上下文。一旦执行完成,它就会被从栈的顶部移除,并将控制权返回到它下面的执行上下文。
每次调用函数,都会创建新的执行上下文。在JavaScript解释器内部,每次调用执行上下文,分为两个阶段:
1.创建阶段【当函数被调用,但未执行任何其内部代码之前】:
创建作用域链(Scope Chain)
创建变量,函数和参数。
求”this“的值。
2.激活/代码执行阶段:
指派变量的值和函数的引用,解释/执行代码。


看了这么多理论知识,下面来个练习题吧:请问输出是多少?Answer:3
[img]http://dl2.iteye.com/upload/attachment/0107/1826/89adf2f0-d93c-37ba-83ff-beffb5b0b853.jpg[/img]

[url]http://www.html-js.com/article/Scope-and-context-learning-every-day-JavaScript-article-understand-Javascript[/url]
这个翻译的文章讲解的很清楚:[url]http://yanhaijing.com/javascript/2014/04/29/what-is-the-execution-context-in-javascript/[/url]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值