美文网首页
作用域与上下文

作用域与上下文

作者: dayindayout | 来源:发表于2019-04-25 10:56 被阅读0次

    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

    ****扩展

    词法分析  语法分析  编译执行   解释执行

    相关文章

      网友评论

          本文标题:作用域与上下文

          本文链接:https://www.haomeiwen.com/subject/kxeagqtx.html