码迷,mamicode.com
首页 > 编程语言 > 详细

Javascript作用域链

时间:2014-09-30 11:01:57      阅读:268      评论:0      收藏:0      [点我收藏+]

标签:style   http   io   os   ar   java   数据   sp   c   

开场白不太会写,直接进入主题!

在javascript中这几个概念 :Scope( 作用域 )、Scope chain( 作用域链 )、Execute context( 执行上下文 )、Active Object ( 活动对象 )、Dynamic Scope( 动态作用域 )、Closure( 闭包 ) 是非常重要的,需要我们的深入理解,以下是我个人理解,如与广大朋友有所出入,欢迎指出。

援引网上的例子:

function add(num1,num2){

  var sum = num1 + num2;

  return sum;

}

var getAdd = add(3,5);

alert(getAdd);

首先,当我们创建add函数的时候,每个被创建函数都有一个内部属性[[Scope]],该内部属性包含了函数被创建的作用域中对象的集合,这个集合被称为函数的作用域链,它决定了哪些数据能被函数访问。所以javascript引擎会为add函数创建一个作用域链(Scope chain),同时这个作用域链指向Globe Context(全局上下文,也就是全局环境)。

这个时候用图表示最清晰:

bubuko.com,布布扣

当我们执行var getAdd = add(3,5);的时候, JavaScript 会创建一个 Execute context (执行上下文即add函数的执行环境),Execute context 也有自己的 Scope chain, 当函数运行的时候, JavaScript 引擎会首先用 add 函数的作用域链来初始化执行上下文的作用域链,然后 JavaScript 引擎又会创建一个活动对象, 这个对象里面包含了函数运行期的所有局部变量,arguments(参数)以及 this 等变量,接着将这个活动推送到该作用域链的顶端,所以我们访问活动对象的顺序是从作用域链的顶端开始访问的,访问活动对象只会从当前执行环境内开始,然后一层一层往外访问,最后到达全局作用环境。

bubuko.com,布布扣

以上就是我个人见解,图片援引网上素材,如有相同,纯属巧合。谢谢!

 

Javascript作用域链

标签:style   http   io   os   ar   java   数据   sp   c   

原文地址:http://www.cnblogs.com/Json1208/p/4001544.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!