发表于: 2018-04-29 23:36:34

1 450


今天完成的事情:

1、完成小课堂。

2、学习了作用域和执行环境的相关知识。


明天计划的事情:

1、学习js语句函数。

2、学习css的相关属性(渐变动画)


遇到的问题:

 无


收获:

执行环境

执行环境又叫做执行上下文,根据js高程里的描述:
执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为。
每个执行环境都有一个与之关联的变量对象(variable object),环境中定义的所有变量函数都保存在这个对象中。
虽然我们编写的代码无法访问这个对象,但解析器在处理数据时会在后台使用它。
每个函数都有自己的执行环境。当执行流进入一个函数时,函数的环境就会被推入一个环境栈中。而在函数执行之后,栈将其环境弹出,把控制权返回给之前的执行环境。ECMAScript 程序中的执行流正是由这个方便的机制控制着。

什么意思呢?就是说,当代码被执行的时候,执行环境被创建,当然最先创建的就是全局执行环境。为方便理解,我们举一个小例子。

在代码开始执行时,先创建全局执行环境(变量对象)。不妨理解为创建了一个这样的对象:

这个变量对象里面 ,有全局变量num,初始为undefined,全局的函数foo,bbb,因为是函数声明,有一个函数声明提升的东西,所以它们的[[scope]]会连接在window的活动对象下。

然后把this指向window全局的活动对象,这里吧所有的初始化后开始执行代码,给num=10赋值。

bbb()执行,

在全局的代码中如果遇到了调用一个函数,就进入到了这个函数的执行环境,建立了这样一个活动对象,创建执行环境,创建作用域链,该执行环境的[[scope]]复制到作用域链上,创建活动对象,扫描该执行环境,找到变量赋值undefined,找到函数加入到起活动对象下面,然后加入arguments对象和this关键字,然后将活动对象推送到作用域链的前端,然后执行函数。


作用域链
当然,作用域是指变量的使用范围,但是在js里存在着作用域链,作用域链可以让内部的函数访问到外部函数中的变量
当代码在一个环境中执行时,会创建变量对象的一个作用域链(scope chain)。
作用域链在函数执行的时候,创建在函数的变量对象上,是创建在变量对象上。
作用域链的用途:保证对该执行环境有权访问的变量和函数的有序访问。
作用链的前端始终是正在执行代码的变量对象。
作用域链链接就是变量对象,连接对象后,通过对象去查找具体变量。
作用域链不连接变量,只链接变量对象。
作用域链只能从里到外,不能从外到里。





返回列表 返回列表
评论

    分享到