1.作用域(Scope)
特指变量和函数的可访问范围,控制着变量和函数的可见性和生命周期,在es5中有全局作用域和块作用域之分,javascript采用词法作用域,也是静态作用域。
静态作用域: 是指作用域在词法分析阶段就确定了,不会改变,也就是说词法作用域取决于源码。
动态作用域: 是指在运行时根据程序的流程信息来动态确立的。
2.上下文(context)
特指this的值,可以使用call(),apply(),bind(),箭头函数等改变上下文。this永远指向最后调用它的那个对象。
3.作用域链
javascript中每个函数都表示一个函数对象,函数对象有一个仅共javascript引擎使用[[scope]]属性,通过语法分析和预解析,将[[scope]]属性指向函数定义时作用域中的所有对象集合,这个集合被称为函数的作用域链。
相比于作用域---谁可以有权限访问到我(变量和函数),作用链可以理解成我(函数)可以访问付集合。
4.执行期上下文(Execution Context)
执行某个具体的函数时,js引擎都会创造一个执行上下文(执行期作用域链)和激活对象(他们的生命周期和函数一致,执行完即销毁),每次=执行一次,都会创造一个执行期上下文。但执行一个函数时,上下文作用域链将使用该函数的作用域链进行初始化,这些值按照出现的顺序复制到执行期上下文链中。
5.闭包(Closure)
闭包是javascript最强大的特性之一,他允许函数访问局部作用域之外的数据,闭包在日常编码工作中非常常见,但是,他会对性能操作影响。
例:图表显示作用域链和执行作用域链
function assignEvents(){
var id = "xdi9592";
document.getElementById("save-btn").onclick = function(event) {
saveDocument(id);
};
}
作用域链:
执行期作用域链:
参考文章:
https://blog.csdn.net/qq_27626333/article/details/78463565
****扩展
词法分析 语法分析 编译执行 解释执行
网友评论