JavaScript:闭包和全局函数之间的开销比较
我想知道JavaScript闭包的开销。假设我有以下函数:JavaScript:闭包和全局函数之间的开销比较,javascript,performance,closures,Javascript,Performance,Closures,我想知道JavaScript闭包的开销。假设我有以下函数: function sum(arr, sumMethod) { var totalSize = 0; for (index = 0; index < arr.length; ++index) { totalSize += sumMethod(arr[index]); } return totalSize; } 另一种方法是像这样内联访问器: // Obtain the total size of all t
function sum(arr, sumMethod) {
var totalSize = 0;
for (index = 0; index < arr.length; ++index) {
totalSize += sumMethod(arr[index]);
}
return totalSize;
}
另一种方法是像这样内联访问器:
// Obtain the total size of all transfers (called pretty often)
var totalTransferSize = sum(transfers, function (transfer) { return transfer.size });
totalTransferSize = sum transfers, (t) -> t.size
我认为闭包只被“编译”一次,并被反复重用,因此实际执行性能是相等的。我的一个同事认为闭包是一次又一次地创建的,它会影响性能
谁能解释一下首选的方法是什么
备注:我实际上在使用CoffeeScript,这使闭包更具可读性。在CoffeeScript中,代码如下所示:
// Obtain the total size of all transfers (called pretty often)
var totalTransferSize = sum(transfers, function (transfer) { return transfer.size });
totalTransferSize = sum transfers, (t) -> t.size
我发现这比使用全局访问器函数更具可读性,因此我更喜欢内联访问器。我的一位同事认为闭包是一次又一次创建的 对。每次计算函数表达式时,都会实例化一个新的函数对象 这会影响性能 不太可能。如果你真的在乎的话,测量一下。实例化可能比调用循环便宜得多 我认为闭包只是“编译”了一次,并反复重复使用 是的,代码只编译一次,并由所有函数实例共享 因此,实际执行性能是相等的
对于单个调用,是的。代码只编译了一次,但函数表达式将创建多个函数对象。因此垃圾收集将更加繁忙。但另一个会一直保持记忆直到时代结束。并不是说会有很多记忆…是的。它只是创建一个全局变量来保存一个值,或者每次需要从一个文本表达式中创建一个值。几乎不可测量,如果在所有-编译器甚至可能优化一个案例到另一个。