最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 调用栈、执行上下文、变量环境以及词法环境

    正文概述 掘金(strongcode)   2021-04-08   558

    文章参考:

    time.geekbang.org/column/arti… github.com/mqyqingfeng…

    执行上下文

    **定义:**当 JavaScript 代码执行一段可执行代码(executable code)时,会创建对应的执行上下文(execution context)。

    调用栈

    调用栈是javascript引擎追踪函数执行的一个机制,通过调用栈就能够了解函数之间的调用关系。javascript利用栈这种数据结构管理执行上下文。

    var a = 0;
    
    function add(a + b) {
    	returan a + b;
    }
    
    function sum(c) {
    	return c + add(2, 3);
    }
    
    sum(a);
    
    
    

    以上代码执行调用栈如下: 调用栈、执行上下文、变量环境以及词法环境

    可以看到调用栈如果不能有序退出那么就会造成栈溢出,这种情况一般会发生在递归调用结束条件有问题情况等等。

    块级作用域

    作用域决定了代码区块中变量和其他资源的可访问性。

    ES6 之前javascript没有块级作用域,只有全局作用域和函数作用域。var、let、const是js定义变量的三个关键词,其中var和let、const有本质不同。let 和 const 都是es6语法。两者都支持块级作用域,并没有变量提升现象,即:不会再编译阶段将声明放置到代码顶部。而在javascript为了加入块级作用域,引入了词法环境这一概念。我们可以简单地认为,var以及function声明的变量加入到环境变量,而let以及const声明的变量加入到词法环境当中。

    我们可以通过一个函数的创建执行来分析这两种变量的不同。

    function strong(){
      var a = 1;
      let b = 2;
      {
        var c = 3;
        let d = 4;
        console.log(c)
        console.log(d)
      }
      console.log(a)
      console.log(b)
      console.log(c)
    }
    
    foo()
    

    当函数创建并执行的时候,会产生如下的调用栈: 调用栈、执行上下文、变量环境以及词法环境

    当执行到console.log(c) 的时候,调用栈如下: 调用栈、执行上下文、变量环境以及词法环境

    可以看到 let , const 等块级作用域变量会直接放到词法环境中,首先在这里寻找变量,如果没有再去变量环境中寻找。块级代码执行完后,这些变量会被词法环境栈直接弹出。


    起源地下载网 » 调用栈、执行上下文、变量环境以及词法环境

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元