第一个问题:IMO,使用在if
语句的条件转让,可能会引起混淆,此外,如果myVar
没有事先声明为var
声明它可能成为一个全局变量。
第二个问题:不,你是不是re-declaringY
第二次,实际上Y
定义之前任何任务,这是悬挂其封闭范围的顶部。
这实际上是如何var
的行为在你的代码:
var Y; // declared and initialized with `undefined`
if (myVar = img.parent('a').length > 0) {
Y = 1; // assignment
} else {
Y = 2; // assignment
}
您可以观察用下面的例子此行为:
var Y = 'foo';
(function() {
alert(Y); //alerts `undefined`
var Y;
})();
正如你看到的,alert
是var
申报前该功能,但由于var
声明是的悬挂,因此该新范围的Y
变量设置为bef在Variable Instantiation进程发生时执行。
最直接的方法,将声明和分配myVar
:
var Y, myVar = img.parent('a').length > 0;
if (myVar) {
Y = 1;
} else {
Y = 2;
}
// Or Y = myVar ? 1 : 2;
或者更短,在一个单一的var
声明:
var myVar = img.parent('a').length > 0,
Y = myVar ? 1 : 2;
//...
来源
2010-05-29 21:45:21
CMS