【发布时间】:2011-08-15 12:51:31
【问题描述】:
我可以像这样在变量中创建递归函数:
/* Count down to 0 recursively.
*/
var functionHolder = function (counter) {
output(counter);
if (counter > 0) {
functionHolder(counter-1);
}
}
这样,functionHolder(3); 将输出 3 2 1 0。假设我做了以下事情:
var copyFunction = functionHolder;
copyFunction(3); 将输出3 2 1 0 如上所述。如果我随后将functionHolder 更改如下:
functionHolder = function(whatever) {
output("Stop counting!");
然后functionHolder(3); 将提供Stop counting!,正如预期的那样。
copyFunction(3); 现在给出3 Stop counting!,因为它指的是functionHolder,而不是函数(它本身指向)。这在某些情况下可能是可取的,但是有没有办法编写函数以便它调用自身而不是保存它的变量?
也就是说,是否可以仅更改 functionHolder(counter-1); 行,这样当我们调用 @987654346 时,通过所有这些步骤仍然会得到 3 2 1 0 @?我试过this(counter-1);,但这给了我错误this is not a function。
【问题讨论】:
-
NB 在函数内部,this 指的是函数执行的上下文,而不是函数本身。在您的情况下,这可能指向全局窗口对象。
标签: javascript function recursion function-expression