在 JavaScript 中,在循环中创建函数的具体原因是什么,可能会浪费计算时间
In JavaScript, what are specific reasons why creating functions within a loop can be computationally wasteful?
在 JavaScript 中,在循环中创建函数在计算上浪费的具体原因是什么?
在 JavaScript the Good Parts的第 39 页,Douglas Crockford 说:"避免在循环中创建函数。 它可能在计算上是浪费"。 我似乎无法弄清楚为什么在循环中创建函数比在循环中创建函数更浪费。
因为您正在创建多个Function
对象,而不是仅重用一个对象。
创建相同函数的示例...
for (var i = 0; i < 10; i++) {
// v--creating identical function in each iteration.
(function(j) {
var el = document.createElement('a');
el.onclick = function() { alert(j); };
document.body.appendChild(el);
})(i);
}
重用命名函数的示例...
for (var i = 0; i < 10; i++) {
var el = document.createElement('a');
// ----------v---calling a reusable function
el.onclick = createHandler(i);
document.body.appendChild(el);
}
function createHandler(j) {
return function() { alert(j); };
}
这两个示例具有相同的结果,但第二个示例不需要在循环期间创建两个函数的开销。相反,它只创建一个处理程序。
创建函数可能会使用大量资源。由于函数实际上是对象,代码每次都必须实际创建一个新的函数对象,它不能只创建一次,然后重用它。
在循环内创建函数通常意味着您将创建大量函数,而不仅仅是在循环外创建单个函数。
因此,这只是一个不在循环内做资源密集型事情的问题,如果你可以在循环外做一次。当涉及到函数时,它们通常可以在循环之外创建,而无需更改代码的逻辑。
相关文章:
- JavaScript计算帮助(乘以时间)
- Javascript-如何使用bootstrap日期时间选择器自动计算两个时间输入之间的差异
- 创建一个倒计时计时器脚本,该脚本计算声音文件的持续时间,而不是特定的日期
- 计算浏览器上的空闲时间
- 如何用javascript计算从现在开始的时间
- 如何计算angular JS应用程序(单页应用程序)的页面加载时间
- 根据时间计算运动
- 高图表动态不同的时间计算
- 距离 = 速率 * 时间计算
- 日期时间计算问题
- javascript中的日期时间计算库
- 关于重构jQuery持续时间计算的建议
- Javascript时间计算从昨天到明天
- 以完整格式显示时间计算
- jquery日期和时间计算firefox NaN
- 时间计算算法
- JS时间计算-一个日期在两个日期之间发生了多少次
- 从给定的UTC时间计算UTC时间&PHP中的秒数
- 防止浏览器冻结和崩溃长时间计算
- Javascript多个工作时间计算从日期到现在