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