javascript函数范围,变量声明

可以说我有以下情况:

var namespace = {};
(function($)
{
    $.extend(namespace, 
    {
        test1: function(someArray, someObj)
        {
             for(var i= 0, ii= someArray.length;i<ii;i++)
             {
                 var text = someObj[someArray[i]];
                 // do something with text
             }
        },
        test2: function(someArray, someObj,i,ii,text)
        /*
             see that the i,ii,text are  unused parameters,
             that will be used instead of variables
        */
        {
             for(i= 0, ii= someArray.length;i<ii;i++)
             {
                  text = someObj[someArray[i]];
                 // do something with text
             }
        },
    });
})(jQuery);

现在,test1和test2的结果是一样的......但性能,内存使用情况......在上面介绍的两种方法中声明i,ii,测试变量之间是否有区别?

例如,我认为test2可能更有效,因为变量位于本地函数作用域中,所以在函数退出后,执行上下文将被销毁,释放用于参数的资源......变量将不会被分配到全局对象'窗口'。

那么什么方法表现最好? 为什么?


[编辑]

谢谢你的回答!

如果代码具有可读性问题,则不存在问题...我现在只对性能/内存使用感兴趣。


如果你不用var i声明你的变量,那么它们就变成全局的。

总是声明你的变量。 如果你做了任何基准测试,你会发现声明的局部变量实际上更快而隐含的全局变量。 你也不会以这种方式泄漏到全局状态。

基准!

正如你所看到的,性能是相同的。

就内存使用而言,局部变量(test1)可能更好,因为编译器不必记住该函数有5个参数。

但是这是一个纳米优化如果你关心这个口径写组件的性能差异。 寻找可读和可修改的代码。

[编辑]

没有注意到方法参数中的“本地”变量。 这是一个可读性杀手! 不要这样做。 你会发现test1可能更有效率。


  • 你为什么不分析你的代码?
  • test1的变量也是本地的。 你用var i声明它们。 这些方法没有区别。

  • “test1”中的变量全部用var声明,所以它们不是全局的。 这两个应该基本相同。

    链接地址: http://www.djcxy.com/p/64153.html

    上一篇: javascript function scope, variable declaration

    下一篇: How to read MetaInfo field values programmatically?