zoukankan      html  css  js  c++  java
  • js的执行上下文


    js中代码有三种类型 : global , function , eval

    每一种代码的执行都需要依赖自身的上下文环境

    每种代码的执行(程序开始执行,函数被调用,eval代码执行)都会产生一个新的上下文环境,这个上下文环境就称为执行上下(execution context--EC)

    执行上下文可以抽象的认为是一个Object,具有一系列属性,其大体结构如下:

    Execution Context : {
    
        variable object : [vars,function declaration,arguments,...]
    
        scope chain : [variable object,all parent scopes]
    
        this : context object
    }


    变量对象(variable object)

    变量对象的抽象表示:

    VO : {
        var1 : xxx,
        var2 : xxx,
        var3 : <function>
    }


    变量对象用于存储定义在上下文中的变量(vars) 和 函数声明(function declaration) ---函数表达式不包含在内
    函数与global和eval稍有不同,在函数上下文中,变量对象被表示为活动对象(activation object)

    活动对象(activation object)

    活动对象是函数上下文中的变量对象,函数被激活时被创建,活动对象拥有变量对象的属性,除此之外,活动对象还包含了特殊对象arguments,抽象表示为:

    AO : {
        var1 : xxx,
        var2 : xxx,
        var3 : <function>,
        arguments : {0:xxx,1:xxx}
    }


    作用域链(scope chain)

    作用域链是一个对象列表,用来检索上下文中出现的标识符(identifiers) ---标识符可以认为是变量,函数声明或者函数中的参数
    通常情况下,作用域链包括自身变量对象或活动对象,父级变量对象(try和with语句会产生临时作用域对象,导致作用域变更)


    This指针

    this是执行上下文的一个属性,不是某个变量对象的属性.
    this的值直接从执行上下文中获取,而不会从作用域链中搜寻。也就是说this的值只取决于进入上下文时的情况。所以,this是不允许赋值的

  • 相关阅读:
    JAVA地址通过百度地图API转化为经纬度
    JS验证手机号
    JAVA获取六位随机数
    JS判断是否为“YYYYMMDD”式的日期
    JAVA 通过url下载图片保存到本地
    JAVA汉字转拼音
    JS判断是否是苹果系统(ios)和安卓系统(Android)客户端
    JAVA获取请求链接中所有参数(GET请求)
    如何高效学习 Kubernetes 知识图谱?
    当云原生遇到混合云:如何实现“求变”与“求稳”的平衡
  • 原文地址:https://www.cnblogs.com/just4play/p/5666395.html
Copyright © 2011-2022 走看看