我需要关于在JavaScript中应用方法的帮助
I need help about apply method in JavaScript
作为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
的参数,它将调用该函数以获得要添加到总和中的值。
相关文章:
- 使用jquery.load('pageName')方法时,未从应用程序缓存加载Html页
- 有没有一种方法可以从Javascript检测特定的应用程序是否安装在(AndroidiOS)设备上
- Meteor应用程序无法运行-对象#<编译器>没有方法'主机'
- 将JSON存储和恢复到此Ionic应用程序的最有效方法
- 如何使用JavaScript's”;应用“;方法,在数组之前添加一个额外的参数
- 如何在不链接/jquery的情况下使用方法应用css属性数组
- 在变量中保存值的最佳方法是在应用程序关闭后使用,然后使用apachecordova在android中重新启动
- 使用子字符串方法时应用程序挂起的原因
- 一种在应用.appendTo()方法时使用回调函数的方法
- 如何让应用程序帮助程序方法在发送的请求为 JS 格式时工作
- 验证数据并将其保存到数据库以供实时应用程序使用的正确方法
- Jquery 委托方法应用程序
- 在 Windows 现代(地铁)UI 应用中存储图像文件和音频文件的方法是什么?
- 在单页应用程序上进行客户端路由的正确方法是什么
- 在 objective-c 中是否有类似的 JavaScript 应用方法
- 这个.用这个应用方法
- 我需要关于在JavaScript中应用方法的帮助
- 如何保存对象实例(和选项)以便将来应用方法
- 对数组应用方法的替代方法
- 对存储在变量中的元素名称应用方法