【问题标题】:Javascript memory concerns and deleting unused variables [duplicate]Javascript内存问题和删除未使用的变量[重复]
【发布时间】:2014-07-22 12:00:52
【问题描述】:

假设我的代码与许多其他代码一样使用了许多变量和赋值。如果在脚本结束时我将所有未使用的变量设置为 null,是否有助于内存和性能?

比如下面的代码:

function DoSomething ()
{
/**** do something ...... */
            if(emailValidator.test(allEmails) == 1) // #id.class.class.class
            {
                var email_parts = [];
                var i = 0;
                var tmp;
                while(tmp = emailValidator.exec(allEmails))
                {
                    email_parts[i] = tmp;
                    i++;
                }
                var wrapped_emails= "";
                for(w=0; w < emails_parts.length; w++)
                {
                    this_class = emails_parts[w][1];
                    emails_classes += " " + this_email.replace(/^\./, "") + " ";
                }
                emails_classes = emails_classes.trim();

                return emails_classes;

                tmp=null; email_parts = null; i = 0; // DOES THIS LINE HELPS THE MEMORY AND PERFORMANCE??????
            }

/** the rest ...... */
}// end of the function

如果你看到,在条件接近尾声时,我已将所有变量设置为 null,但要返回的变量除外。

现在,我的问题是,将变量排除为 null 是否有助于内存和执行性能?

【问题讨论】:

  • 我不确定该行是否会执行,因为您已经完成了return。而那些变量使用了。

标签: javascript


【解决方案1】:

将变量设置为null 只会使它们具有null 值。

JavaScript 有一个垃圾收集器,这意味着它将释放不再被引用的变量(您可能想阅读this article)。

在您的情况下,尽管您在 if 块内同时声明了 tmpemail_parts,但它们实际上将在 DoSomething 函数执行结束时被释放,因为这些声明被移动到顶部范围(见variable hoisting)。

另外,正如@Andy 所说,tmp=null; email_parts = null; i = 0; 没有任何效果,因为您将return emails_classes; 放在它的正上方。

【讨论】:

    【解决方案2】:

    不,它没有

    作为程序员,您不应该考虑这样的微调整。让编译器/垃圾收集器来处理。

    作为程序员,我们的主要关注点应该是“易于理解”的代码“做它应该做的”。

    在您完成编写代码之后。如果有问题,您可以查看性能。如果是这样,测试,测试,测试和测试

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-17
      • 2014-07-01
      • 2021-04-19
      • 2021-12-04
      相关资源
      最近更新 更多