开场白不太会写,直接进入主题!
在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 等变量,接着将这个活动推送到该作用域链的顶端,所以我们访问活动对象的顺序是从作用域链的顶端开始访问的,访问活动对象只会从当前执行环境内开始,然后一层一层往外访问,最后到达全局作用环境。
以上就是我个人见解,图片援引网上素材,如有相同,纯属巧合。谢谢!
新闻热点
疑难解答