2017-03-05 99 views
0

所以我想寫一個簡單的工廠函數,返回一個函數,接受回調。爲什麼n減少?

這個回調function (func, n)需要2個參數,第一個功能,第二個參數。
它所要做的就是每次調用func遞增n
func是函數表達式shell,即調用回調並返回結果n

console.log中,b4表示調用回調之前,而after表示之後。

我很困惑的是,爲什麼after的輸出減少了?

var factory = function (cb) { 
 

 
    var shell = function (n) { 
 
    console.log('b4: ' + n); 
 
    var rs = 0; 
 
    if (n && n < 5) { 
 
     rs = cb(shell, n); 
 
     console.log('after: ' + n + ' // huh?'); 
 
     console.log('return rs: ' + rs); 
 
     return rs; 
 
    } 
 
    console.log('return n: ' + n); 
 
    return n; 
 
    }; 
 
    return shell; 
 
} 
 

 
var a = factory(function (func, n) { 
 
    return func(n + 1); 
 
}); 
 
console.log('a: ' + a(1));

Jsbin:https://jsbin.com/raqiwom/edit?js,console

+1

由於遞歸,遞歸調用shell,但每次迭代中的'n'保持不變通過調用 –

+0

打印* b4 *的遞歸調用在*之後打印*之前,所以您看到* b4 *計數然後*在每次遞歸調用返回時倒計時。 – RobG

回答

0

因爲它是一個遞歸結構。 「rs = cb(shell,n);」在「console.log('after:'+ n +'// huh?');」之前執行,並調用「shell」函數。