首页 > 网站 > WEB开发 > 正文

Javascript作用域链

2024-04-27 14:18:35
字体:
来源:转载
供稿:网友

javascript作用域链

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

Javascript中这几个概念 :Scope( 作用域 )、Scopechain( 作用域链 )、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(全局上下文,也就是全局环境)。

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

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

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


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表