Javascript代码语义
当我运行此代码时,myVar(第一次被宣布)的值为Javascript代码语义,javascript,semantics,Javascript,Semantics,当我运行此代码时,myVar(第一次被宣布)的值为img.parent('a')。length>0,并根据具体情况变为false或true 第一个问题: 这是定义myVar的正确方法吗 第二个问题: 我是否第二次定义了Y?我的第二个'var'是否过量? i、 e.我是否应该只写Y=2第一个问题:IMO在if语句的条件下使用赋值可能会导致混淆,而且如果myVar之前未使用var语句声明,则它可能会成为全局变量 第二个问题:不,你不再是Y,实际上Y是在任何赋值之前定义的,它被提升到其封闭范围的顶部
img.parent('a')。length>0
,并根据具体情况变为false
或true
第一个问题:这是定义myVar的正确方法吗 第二个问题:
我是否第二次定义了Y?我的第二个
'var'
是否过量?i、 e.我是否应该只写
Y=2代码>第一个问题:IMO在if
语句的条件下使用赋值可能会导致混淆,而且如果myVar
之前未使用var
语句声明,则它可能会成为全局变量
第二个问题:不,你不再是Y
,实际上Y
是在任何赋值之前定义的,它被提升到其封闭范围的顶部
这就是var
在代码中的实际行为方式:
if(myVar = img.parent('a').length > 0){
var Y = 1;
}else{
var Y = 2;
}
您可以通过以下示例观察此行为:
var Y; // declared and initialized with `undefined`
if (myVar = img.parent('a').length > 0) {
Y = 1; // assignment
} else {
Y = 2; // assignment
}
如您所见,alert
位于该函数中的var
声明之前,但是由于var
语句被挂起,因此当流程发生时,将在执行之前设置此新范围中的Y
变量
最直接的方法是声明和分配myVar
:
var Y = 'foo';
(function () {
alert(Y); //alerts `undefined`
var Y;
})();
甚至更短,在单个var
语句中:
var Y, myVar = img.parent('a').length > 0;
if (myVar) {
Y = 1;
} else {
Y = 2;
}
// Or Y = myVar ? 1 : 2;
var myVar = img.parent('a').length > 0,
Y = myVar ? 1 : 2;
//...