zoukankan      html  css  js  c++  java
  • [转] Try to use one var statement per scope in JavaScript

    JavaScript’s var statement declares and optionally initializes one or more variables in the scope of the current function (or as global variables when used outside a function). Since var accepts multiple declarations, separated by commas, there’s usually no reason to use it more than once per function; it’s just a waste of bytes and—especially if you redeclare variables inside a loop—CPU cycles.

    Overuse of var statements is one of the most common problems I see in JavaScript code. I was guilty of it myself for quite a while and it took me a long time to break the habit.

    Bad:

    function getElementsByClassName(className, tagName, root) {
      var elements = [];
      var root     = root || document;
      var tagName  = tagName || '*';
      var haystack = root.getElementsByTagName(tagName);
      var regex    = new RegExp('(?:^|\\s+)' + className + '(?:\\s+|$)');
     
      for (var i = 0, length = haystack.length; i < length; ++i) {
        var el = haystack[i];
     
        if (el.className && regex.test(el.className)) {
          elements.push(el);
        }
      }
     
      return elements;
    }
    

    There are several things wrong with the example above.

    The most obvious problem is that I’ve used the var statement no less than seven times. Somewhat less obvious, but far worse: I’ve used it inside a loop, which means that I’m unnecessarily redeclaring a variable on each iteration. I’ve also unnecessarily redeclared two variables that were passed in as function arguments.

    Naturally, there’s a much better way to do this.

    Good:

    function getElementsByClassName(className, tagName, root) {
      root    = root || document;
      tagName = tagName || '*';
    
      var elements = [],
          haystack = root.getElementsByTagName(tagName),
          length   = haystack.length,
          regex    = new RegExp('(?:^|\\s+)' + className + '(?:\\s+|$)'),
          el, i;
    
      for (i = 0; i < length; ++i) {
        el = haystack[i];
    
        if (el.className && regex.test(el.className)) {
          elements.push(el);
        }
      }
    
      return elements;
    }
    

    There are circumstances in which it is actually necessary to redeclare a variable within a single scope, but they’re very rare, and are more often than not a warning sign that you need to rethink the code you’re writing.

  • 相关阅读:
    如何提高Java并行程序性能??
    《实战Java虚拟机》,最简单的JVM入门书,京东活动,满200就减100了,该出手了
    看JVM就推荐这本书
    【Java】实战Java虚拟机之五“开启JIT编译”
    实战Java虚拟机之四:提升性能,禁用System.gc() ?
    实战Java虚拟机之三“G1的新生代GC”
    实战Java虚拟机之二“虚拟机的工作模式”
    实战Java虚拟机之一“堆溢出处理”
    实战java虚拟机的学习计划图(看懂java虚拟机)
    aspose.cells 复制单元格
  • 原文地址:https://www.cnblogs.com/JulyZhang/p/1979619.html
Copyright © 2011-2022 走看看