我什么时候应该使用变量vs原始值?

时间:2014-07-17 00:23:25

标签: javascript variables

我应该何时定义变量?在if语句中使用原始值与变量一次使用会更快吗?例如,原始值:

if(variable == 503) {
    //run code 
} 

VS这个:

if(variable == anotherVariable) {
    //run some code
}

我正在寻找哪一种更快更安全(在if语句和一般情况下)。

3 个答案:

答案 0 :(得分:6)

我想说这取决于变量代表什么。如果它是一个将在多个地方重用的全局常量,那么肯定使用一个变量。否则,如果它是一次性使用值,则不需要变量。

我倾向于从价值开始。然后,当我遇到另一个我重用相同值的情况时,我将其移动到全局(或必要范围)变量。

修改

在评论中进行了一些讨论之后,很明显从长远来看,最好用可描述的变量名来写出值。

经验法则是始终对变量和值使用描述性名称(并可能为它们添加注释)。但是,程序员可以自行决定是否有足够的上下文来存在没有变量名的值。请考虑未来的开发人员阅读您的代码,并且不要认为他们显然知道您在谈论什么(很容易犯错)。

答案 1 :(得分:3)

我建议始终使用这些值的描述性名称。在这种特殊情况下,503意味着什么?

答案 2 :(得分:1)

我完全同意其他答案 - 试着给出另一个灵感...... 我记得当我开始编码的时候,我已经完成了微优化,比如哪个变量会表现得更好,但毕竟我个人为我的编码风格明确地提出了关于变量和函数名称的规则:

  1. 其他人也有编码风格。从经验丰富的人那里学习意味着一方面使用他们的经验,更接近于 - 所谓 - “全球”风格,这样可以提高彼此代码之间的可读性。
  2. 选择名称尽可能具有描述性。不仅如此,它使您的代码更具可读性和可维护性,而且这也导致了对代码结构本身内部功能的关注。
  3. 保持一致并不意味着不再灵活,不要在新体验之后发展自己的风格,但这是一般的好习惯。
  4. 让名字告诉你类型。
  5. 让名称告诉你范围。
  6. 所以这里的一般规则是一些实际的例子:

    我刚刚选择了一个非常抽象的例子来展示一般功能......

    var _outerScope = 'I prefer to mark my variables with the most global scope with a leading underscore';
    
    (function (){
    
        var innerScope      = 'while this variable has its scope inside of this function its just meant to be used in here'
        if (_outerScope !== innerScope) {
            'everything is a bit more clear';
        }
    
        var fSetAttrTitle   = function ( $Selector, iSelector ) {         // read as: "function set attribute title" awaits an "jQuery object" and "integer"
          sOriginalTitle = $Selector.attr('title');                       // ra: "string original title" = "jQuery object selectors attribute title"
          $Selector.attr('title', 'this container has id: ' + iSelector); // ra: "jQuery object selectors attribute title" = "this container has id: " plus "integer selector"
          return sOriginalTitle;                                          // ra: "return string original title"
        };
    
        var isIdSel2inArray = false;                       // this should be self explanatory
        var aSelector       = ['#sel1', '#sel2', '#sel3']; // ra: "array selector" = [...]
        var iSelector       = aSelector.length;            // ra: "integer selector" = length of "array selector" | normally i would use "i" instead of iSelector in this case but for illustration lets stay with it
        while ( iSelector-- )                       // ra: "iterate until iSelector is 0"
        {
          sSelector = aSelector[ iSelector ];              // ra: "string selector" is a piece out of "array selector" with number "integer selector"
          if (sSelector !== '#sel2') {                     // ra: "if string selector is not '#sel2' then array selector is return value of set attribute title"
            aSelector[ iSelector ] = fSetAttrTitle( jQuery( sSelector ), iSelector );
          } else {                                         // ra: "if string selector is '#sel2' then '#sel2' is in array"
            isIdSel2inArray = true;
          }
        }
    
        if (isIdSel2inArray === true) {
          alert('ra: "if boolean is id sel2 in array is true alert this text"');
        }
    
    }).call(this);
    
    if (typeof innerScope === 'undefined') {
        'Of course I can not use this variable here while it has no underscore '
        + 'its not in the outer scope but the next one has an underscore so it is '
        + 'save to use it here ' + (typeof _outerScope !== 'undefined');
    }
    
    希望它有点鼓舞人心:)