作为JavaScript的绝对初学者,我必须选择一些好的资源来帮助我学习它。我选择了#14; JavaScript:The Definitive Guide"大卫·弗拉纳根(David Flanagan)到目前为止,我认为本书中的所有内容都得到了彻底的解释,但我已经达到了我被困的地步......
这就是问题所在,在章节"功能" - >"参数类型"这是一个添加数组或数组元素的函数示例。此函数可以接受任何数字和类型(如果它可以将其转换为数字)的参数。代码如下:
function flexisum() {
var total = 0;
for (var i = 0; i < arguments.length; i++) {
var element = arguments[i], n;
if (element == null) continue;
if (isArray(element))
n = flexisum.apply(this, element);
else if (typeof n === "function")
n = Number(element());
else
n = Number(element);
total += n;
}
return total;
}
让我感到困惑的是发生递归的行,我无法弄清 n 评估的值。例如,如果元素= [1,2,3] , flexisum(1,2,3)被分配给 n ..但是,如果 n 没有初始值,那么如何将该值添加到变量总计,或者是否可以?
英语不是我的母语,所以我希望我足够清楚...我会感激任何帮助。
答案 0 :(得分:0)
n
不需要初始值。进行递归调用时,该调用具有自己的所有变量副本。它将total
的副本初始化为0
,然后遍历其参数。在这种情况下,参数都是数字,因此它们每个都添加到total
,从而产生6
。最后,它执行return total;
,并在原始调用中将此值分配给n
。然后将其添加到total
。
代码中似乎有错误。这一行:
else if (typeof n === "function")
应该是:
else if (typeof element === "function")
否则,它会尝试测试未初始化变量n
的类型。这允许您提供一个函数作为flexisum
的参数,它将调用该函数来获取要添加到总和中的值。