【发布时间】:2019-10-19 18:53:25
【问题描述】:
我有一个用 javascript 编写的函数,它跟踪传递给它的函数的递归调用。
function trace(fn){
let indent = 0
return function tracedFunction(args){
console.log("| ".repeat(indent)+"|--"+fn.name,args)
indent += 1
let value = fn(args)
console.log("| ".repeat(indent)+"|--"+"return",value)
indent -= 1
return value
}
}
function fibo(num){
if(num==0 || num==1)
return 1;
return fibo(num-1)+fibo(num-2);
}
fibo = trace(fibo)
fibo(4)
这给出了以下输出
|--fibo 4
| |--fibo 3
| | |--fibo 2
| | | |--fibo 1
| | | | |--return 1
| | | |--fibo 0
| | | | |--return 1
| | | |--return 2
| | |--fibo 1
| | | |--return 1
| | |--return 3
| |--fibo 2
| | |--fibo 1
| | | |--return 1
| | |--fibo 0
| | | |--return 1
| | |--return 2
| |--return 5
5
我的问题如下
-
fibo = trace(fibo)行发生了什么?- 是不是重新定义了
fibo函数? B 是否在全局范围内创建了一个名为
fibo的变量并将trace(fibo)分配给它?如果 (A) 是这种情况,这样做是一个好习惯吗?有没有其他方法可以做到这一点?
- 是不是重新定义了
【问题讨论】:
-
它只是简单地给一个变量赋值。
标签: javascript closures higher-order-functions