javascript——执行环境和作用域

先来明白几个概念:

执行环境:有时候也叫环境,定义了变量和函数有权访问的其它数据,决定了他们各自的行为。每一个指定环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中。

全局执行环境是最外围的一个执行环境,在Web浏览器中,被认为是window对象,每个函数都有自己的执行环境,每当执行流进入一个函数的时候,函数的环境将会被推入一个栈中,函数执行完成后,栈就被弹出,理解栈也就能理解,所以内部可以向上访问外部,外部不能向下访问内部。

当代码在一个环境中执行的时候,就会创建作用域链,保证对执行环境有权访问所有变量和函数的有序访问。全局执行环境的变量对象始终都是作用域中的最后一个对象。(个人理解:可以把作用域链想象成一条链子,链子都是通过环境对象连接起来,末端就是全局对象,最前端就是当前执行的代码所在的环境对象,为什么是一条链子呢,就是我这没有的东西,属性等,可以向链子的后端去追溯访问)当然找不到,就报错呗!找到了就停止。

自己根据自己理解,画了一个草图,有问题很开心沟通交流

函数中称为活动对象,因为在函数执行上下文中,变量对象是不能直接访问的,此时由激活对象扮演变量对象,激活对象是在进入函数上下文中被创建的,通过函数的arguments属性初始化。

这几个属性和属性吧,对于函数来说。这就是激活对象内部的属性。

对于整个的创建流程,需要清楚一下呢:

1、首先根据函数的参数,创建并初始化arguments object

2、查找函数声明,将函数引用保存到变量对象,或者对于函数来说的激活对象里面,后来居上,如果已经存在就覆盖。

3、查找变量声明,自动初始化为undefined。

 

执行环境和作用域链的区别和联系:

 

执行环境有全局执行环境和局部执行环境(也就是函数执行环境)

作用域链是由多个执行环境的变量对象共同组成的。对象对象对象组成!! 那么作用域就是一个个变量对象了

当代码在一个环境中执行的时候,会创建变量对象的作用域链。

在javascript中,没有块级作用域,更没有对象作用域,with语句逆天除外,但是在开发大型应用程序会导致性能降低,加大代码调试难度,不建议使用。

所以Javascript中就两种作用域:全局作用域和函数作用域

记住变量提升的东西!

this:指向一个对象,就是一个普通的可以访问的对象。

好文: 

    执行上下文:http://www.cnblogs.com/wilber2013/p/4909430.html

下一篇文章,结合代码分析:[[scopes]]结合实际分析

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值