这似乎是有效的,但我是否有必要这样做?这样可以为我节省一行代码,并让我设置一个变量并设置文本区域的值。
$('#price').val(default_price = 2.9);
这等同于:
default_price = 2.9;
$('#price').val(default_price);
这似乎是有效的,但我是否有必要这样做?这样可以为我节省一行代码,并让我设置一个变量并设置文本区域的值。
$('#price').val(default_price = 2.9);
这等同于:
default_price = 2.9;
$('#price').val(default_price);
它将执行一项任务的代码嵌入到完全不同的任务代码中。
特别是在处理默认值、"常量"等内容时,混淆初始化和UI交互会导致混淆。将它们分开-更容易查找和维护。
从技术上讲,它是相同的。但从认知上讲,它并不相同。
o.v.提出了全局命名空间污染的问题。通过在任意位置声明变量,您增加了覆盖值、误打标识符、重复工作等错误的概率。
除了创建难以隔离的错误之外,这还是一个额外的认知负担,因为您还必须了解声明变量的范围、定位其他可能使用它的位置等。
$('#price').val(var default_price = 2.9); //nope
如果使用未声明的变量来编写原始代码,则会污染全局范围。但是,如果该变量已经声明,则会引发一个后续问题:“为什么没有使用正确的默认值进行声明”。或者,魔法数字可能会因为(未知的)条件而不同:
if (/*whatever*/) {
$('#price').val(default_price = 2.9);
} else {
$('#price').val(default_price = 9522); //over 9000
}
再次提醒,这样的编写方式不够规范,应该将设置 #price
的值放在条件语句之外(或使用 switch
语句):
if (/*whatever*/) {
default_price = 2.9;
} else {
default_price = 9522;
}
$('#price').val(default_price);
有时候会出现一个复杂的情况,即变量设置器被覆盖以返回与分配值不同的内容,这在我看来有点可疑。
我不会像你这样使用它 - 因为我总是更喜欢将对象存储为一个集合来存储单个值,例如:
var defaults = {
"price" : 2.9
};
var view;
if ( (view = someClass.thatChecksAndLoads('a view')) ) {
/// do something with the view
}
上述适用于您有多种方法可以访问您的view
对象的情况,例如:
if ( (view = someClass.thatChecksAndLoads('a view')) ) {
/// do something with the view
}
else if ( (view = anotherWay.toLoad('a view')) ) {
/// do something here instead
}
顺便提一下 - 以防有人想知道 - 我在上面不是无缘无故地加入了额外的括号。相当多的JavaScript编译器 (还有ActionScript编译器) 在if语句中只有一个'='会抱怨/记录错误。这是因为它们试图帮助您,以防您的意思是'=='...通过将赋值语句放在括号中,通常可以规避此检查,或者至少停止发出警告。
view = functionCall(); if(!view){view = getViewAnotherWay();}; if(view){ doSomethingWith(view);}
这样的布局相比,我更喜欢这种布局,特别是当您根据视图对象的来源而不同地处理视图对象时。 - Pebbl