我需要关于在JavaScript中应用方法的帮助

I need help about apply method in JavaScript

本文关键字:应用 方法 帮助 JavaScript      更新时间:2023-09-26

作为JavaScript的绝对初学者,我必须选择一些好的来源来帮助我学习它。我选择了David Flanagan的《JavaScript:最终指南》,到目前为止,我认为这本书中的一切都得到了彻底的解释,但我到了我陷入困境的地步。。。

问题是,在"函数"->"参数类型"一章中,有一个函数的例子,它添加了数组的数字或元素。此函数可以接受任何数量和类型的参数(如果可以将其转换为数字)。代码如下:

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没有初始值,或者有初始值,我如何将该值添加到变量total

英语不是我的母语,所以我希望我足够清楚。。。如果有任何帮助,我将不胜感激。

n不需要初始值。当您进行递归调用时,该调用拥有所有变量的自己的副本。它将total的副本初始化为0,然后循环通过其参数。在这种情况下,自变量都是数字,因此它将它们分别添加到total,得到6。最后,它执行return total;,并且在原始调用中将该值分配给n。然后将其添加到total的副本中。

代码中似乎确实存在错误。此行:

else if (typeof n === "function")

应该是:

else if (typeof element === "function")

否则,它将尝试测试未初始化的变量n的类型。这允许您提供一个函数作为flexisum的参数,它将调用该函数以获得要添加到总和中的值。