我应该何时定义变量?在if语句中使用原始值与变量一次使用会更快吗?例如,原始值:
if(variable == 503) {
//run code
}
VS这个:
if(variable == anotherVariable) {
//run some code
}
我正在寻找哪一种更快更安全(在if语句和一般情况下)。
答案 0 :(得分:6)
我想说这取决于变量代表什么。如果它是一个将在多个地方重用的全局常量,那么肯定使用一个变量。否则,如果它是一次性使用值,则不需要变量。
我倾向于从价值开始。然后,当我遇到另一个我重用相同值的情况时,我将其移动到全局(或必要范围)变量。
修改强>
在评论中进行了一些讨论之后,很明显从长远来看,最好用可描述的变量名来写出值。
经验法则是始终对变量和值使用描述性名称(并可能为它们添加注释)。但是,程序员可以自行决定是否有足够的上下文来存在没有变量名的值。请考虑未来的开发人员阅读您的代码,并且不要认为他们显然知道您在谈论什么(很容易犯错)。
答案 1 :(得分:3)
我建议始终使用这些值的描述性名称。在这种特殊情况下,503意味着什么?
答案 2 :(得分:1)
我完全同意其他答案 - 试着给出另一个灵感...... 我记得当我开始编码的时候,我已经完成了微优化,比如哪个变量会表现得更好,但毕竟我个人为我的编码风格明确地提出了关于变量和函数名称的规则:
所以这里的一般规则是一些实际的例子:
我刚刚选择了一个非常抽象的例子来展示一般功能......
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');
}
希望它有点鼓舞人心:)