js实行环境的明白

var compose=function(a,b){
    return function(){
        return a+b
    }
}
var g=1
var h=1
var f=compose(g,h)
console.log(f)    // function () {return a + b;}
console.log(f())  // 2
  • Q:第一个打印的效果不是function () { return 3};

  • A:当挪用compose时,建立了一个实行环境E1,该实行环境中,有a=1,b=1;此时的环境相当于:

a=1,b=1;
function(){return a+b}

由于返回的函数没有立即在compose内挪用,所以a=1,b=1没有传入函数中

  • Q:第二个打印效果是 2?

  • A:f();挪用function(){return a+b},建立这个匿名函数的环境E2,先在这个环境中找a,b.然则没有。进入它的上级环境,是E1,E1环境中有a=1,b=1。所以效果是2.

    原文作者:MDWfly
    原文地址: https://segmentfault.com/a/1190000007727620
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞