在循环中创建函数的最有效替代方法

时间:2015-01-30 05:44:27

标签: javascript performance function

我想要创建的函数需要访问myObject。 在main函数中创建辅助函数是否更好,因此我可以使用范围访问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]);
}

2 个答案:

答案 0 :(得分:2)

我认为你要求表现。

Here is a jsperf to test it for you(是的,这存在且非常整洁)。

因此,在运行测试时,我注意到两种方法都没有明显获胜。它非常接近,几乎可以肯定并不重要。我还注意到,在Windows 8.1上,IE 11将Chrome从水中吹走,它甚至没有关闭 - 比如20倍。这个结果很简单,但并不能真正反映现实世界的代码性能而且我们可能只是打了一个优化的案例。在IE中,函数版本是一个微小的,几乎无关紧要的位。

您可以稍微使用输入(例如,我只是传入一个小对象,也许是一个大的具有不同的结果),但我已准备好调用初步结论:不要担心这里的表现。在代码清晰度方面,使用对您的特定情况更有意义的任何一个。

答案 1 :(得分:1)

除了George Mauer提到的性能优势之外,我认为将其保持在内部是为了保持全球环境清洁是个好主意。

不同的函数可以在其中使用相同的名称定义自己的帮助程序,而不是在全局上下文中使用function1Helper,function2Helper ....