第六章 javaScript执行环境和作用域

这个只是点对于初学者其实大概了解就可以,但是要研究明白javaScript的机制,就是非常必要的,这只是我的一些记录,大家参考即可,如有错误请指出。

 

执行环境的概念是javaScript一个虚拟的概念,如何定义它呢?它的作用又是什么呢?它是怎么组成的呢?

大家都比较认可的说法:执行环境又称为执行上下文,从实际的表现来看,可以把它理解为由“对象”组成的一个堆栈。既然是堆栈,就是先入后出了。

组成堆栈的对象是什么对象?我没有找到确切的定义,基于我自己的理解,这个对象是一个自定义对象,里边包含有变量、函数定义(不包括函数表达式)、参数列表、作用域链以及this(也就是当前)。

比如说在浏览器环境下(为什么特意说明,因为js可以不在浏览器环境内运行,例如node.js),window对象就是全局的执行环境的对象,在堆栈内的表现,它就是最先入栈的对象。

 

其实这个执行环境是相对于函数来说的,一个函数的调用(甚至递归)就产生了一个新的上下文环境。

当浏览器初始化时,window对象就建立了,它包含所有全局变量、函数等。语句执行遇到一个函数调用时,就会把函数的上下文对象压入执行环境栈,然后函数就初始化、执行,执行完毕后出栈。

变量的作用域是通过“执行环境对象”的作用域链来进行管理和使用的,对于作用域链,js的机制是这么设计的,当前执行环境对象建立时,会自动有一个作用域链,作用域链是一个 对象列表(list of objects) ,用以检索上下文代码中出现的 标识符(identifiers) 。

当使用变量时,会从当前活动的执行环境对象里寻找,如果没有就到父级对象里寻找,一直找到window,如果还没有,就返回undefined。

 

我只是简单的这么理解,有一个文章写的不错,比我这个强多了,但是为了学习我还是自我总结了一下。

地址如下:http://www.cnblogs.com/no-particular/archive/2013/01/31/2887293.html

posted @ 2015-07-07 13:23  定海神针  阅读(151)  评论(0编辑  收藏  举报