2017-03-05 91 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”函数。

相关问题