在循环中创建函数的最有效替代方法
Most efficient alternative to making functions within a loop
我要创建的函数需要访问 myObject。
在主函数中创建辅助函数是否更好,这样我就可以使用范围访问 myObject。
或者我应该在 myFunction 之外创建辅助函数并将 myObject 作为参数传递吗?
编辑:这些方法会导致内存泄漏问题吗?
//Method 1
var myFunction = function(myObject){
var helper = function(i){
return console.log(i,myObject[i]);
}
for(var i in myObject){
var callback = helper(i);
}
}
//Method 2
var myFunction = function(myObject){
for(var i in myObject){
var callback = helper(i,myObject);
}
}
var helper = function(i,myObject){
return console.log(i,myObject[i]);
}
我假设你要求的是性能。
Here is a jsperf to test it for you(是的,这个存在并且非常整洁)。
所以在 运行 测试中,我注意到这两种方法都没有明显获胜。它非常接近,几乎可以肯定无关紧要。我还注意到,在 Windows 8.1 上,IE 11 将 Chrome 打得落花流水,它甚至还差得远——大约是 20 倍。这是一个很好的小结果,但并不能真正代表现实世界的代码性能,很可能我们只是在优化案例。在 IE 中,功能内版本快了一点点,几乎无关紧要。
你可以稍微玩一下输入(例如我只是传入了一个小对象,也许一个大的对象会有不同的结果),但我已经准备好调用一个初步的结论:不要担心这里的性能。就代码清晰度而言,使用对您的特定情况更有意义的任何一个。
除了 George Mauer 提到的性能优势之外,我认为将其保留在内部以保持全局上下文清洁是个好主意。
不同的函数可以在它们内部使用相同的名称定义自己的助手,而不是在全局上下文中使用 function1Helper、function2Helper...。
我要创建的函数需要访问 myObject。 在主函数中创建辅助函数是否更好,这样我就可以使用范围访问 myObject。
或者我应该在 myFunction 之外创建辅助函数并将 myObject 作为参数传递吗?
编辑:这些方法会导致内存泄漏问题吗?
//Method 1
var myFunction = function(myObject){
var helper = function(i){
return console.log(i,myObject[i]);
}
for(var i in myObject){
var callback = helper(i);
}
}
//Method 2
var myFunction = function(myObject){
for(var i in myObject){
var callback = helper(i,myObject);
}
}
var helper = function(i,myObject){
return console.log(i,myObject[i]);
}
我假设你要求的是性能。
Here is a jsperf to test it for you(是的,这个存在并且非常整洁)。
所以在 运行 测试中,我注意到这两种方法都没有明显获胜。它非常接近,几乎可以肯定无关紧要。我还注意到,在 Windows 8.1 上,IE 11 将 Chrome 打得落花流水,它甚至还差得远——大约是 20 倍。这是一个很好的小结果,但并不能真正代表现实世界的代码性能,很可能我们只是在优化案例。在 IE 中,功能内版本快了一点点,几乎无关紧要。
你可以稍微玩一下输入(例如我只是传入了一个小对象,也许一个大的对象会有不同的结果),但我已经准备好调用一个初步的结论:不要担心这里的性能。就代码清晰度而言,使用对您的特定情况更有意义的任何一个。
除了 George Mauer 提到的性能优势之外,我认为将其保留在内部以保持全局上下文清洁是个好主意。
不同的函数可以在它们内部使用相同的名称定义自己的助手,而不是在全局上下文中使用 function1Helper、function2Helper...。