有些同事说嵌套函数不利于性能,我想问一下。
假设我有这个功能:
function calculateStuff() {
function helper() {
// helper does things
}
// calculateStuff does things
helper();
}
helper 是一个私有(private)函数,仅在 calculateStuff 内部使用。这就是为什么我想将其封装在 calculateStuff 中。
这是否比做更糟糕的性能:
function helper() {
}
function calculateStuff() {
helper();
}
请注意,在第二种情况下,我将 helper 暴露给了我的范围。
最佳答案
理论上,这会对性能产生潜在影响,因为每次调用 calculateStuff 时,您都需要为 helper 创建一个新的闭包上下文(因为它可能引用来自封闭范围)。
我非常确定大多数 JavaScript 引擎中的 JIT 编译器应该能够告诉您您实际上并没有从父上下文访问任何变量,并且只是跳过绑定(bind)所有这些值.我可能遗漏了一些边缘情况,在这些情况下这通常是不可能的,但它似乎足够直截了当。
无论如何,我们讨论的是每次迭代的纳秒级开销,因此除非您的代码执行很多,否则您永远不会注意到时差。如果有疑问,分析它并检查...
我决定听从自己的建议,并对这个 on jsperf 进行分析,在 Safari 9 中。我使用了原始问题中提供的不执行任何操作的函数,以强调仅调用嵌套函数的开销:
嵌套函数:每秒 136,000,000 次调用
平面函数:每秒 1,035,000,000 卡
Oriol's IIFE version : 每秒 220,000,000 卡
很明显,平面函数比任何一个替代版本都快很多。 但是,想想这些数字的大小——即使是“慢”版本也只增加了 0.007 微秒的执行时间。如果您在该函数中进行任何类型的计算或 DOM 操作,它绝对会使嵌套函数的开销相形见绌。
关于javascript - 在 javascript 中嵌套函数和性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33248316/