2010-05-29 40 views
4
if(myVar = img.parent('a').length > 0){ 
    var Y = 1; 
}else{ 
    var Y = 2; 
} 

当运行此代码myVar的(首次被公布)取img.parent('a').length > 0值并变为任一falsetrue根据情况。Javascript代码语义

第一个问题:
这是定义myVar的的正确方法是什么?

第二个问题:
难道我定义Ÿ第二次?我的第二个'var'是多余的?
即应我只是写Y = 2;

回答

7

第一个问题: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; 
})(); 

正如你看到的,alertvar申报前该功能,但由于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; 
//...