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;此时的环境至关于:code
a=1,b=1; function(){return a+b}
由于返回的函数没有当即在compose内调用,因此a=1,b=1没有传入函数中io
Q:第二个打印结果是 2?console
A:f();调用function(){return a+b},建立这个匿名函数的环境E2,先在这个环境中找a,b.可是没有。进入它的上级环境,是E1,E1环境中有a=1,b=1。因此结果是2.function