Moh*_*mad 4 javascript semantics
if(myVar = img.parent('a').length > 0){
var Y = 1;
}else{
var Y = 2;
}
Run Code Online (Sandbox Code Playgroud)
当我运行这段代码时,myVar(第一次宣布)取值img.parent('a').length > 0并成为false或者true取决于具体情况.
第一个问题:
这是定义myVar的正确方法吗?
第二个问题:
我是第二次定义Y吗?我的第二次'var'过剩了吗?
即我应该写Y = 2;
第一个问题:IMO,在if语句的条件下使用赋值,可能会引起混淆,如果myVar之前没有var声明它可能成为全局变量的语句.
第二个问题:不,你不是第二次重新宣布 Y,实际上Y是在任何任务之前定义的,它被提升到其封闭范围的顶部.
这是var您的代码中的实际行为:
var Y; // declared and initialized with `undefined`
if (myVar = img.parent('a').length > 0) {
Y = 1; // assignment
} else {
Y = 2; // assignment
}
Run Code Online (Sandbox Code Playgroud)
您可以使用以下示例观察此行为:
var Y = 'foo';
(function () {
alert(Y); //alerts `undefined`
var Y;
})();
Run Code Online (Sandbox Code Playgroud)
如您所见,它位于该函数中alert的var声明之前,但由于var语句被提升,因此Y在执行变量实例化过程之前,将在执行之前设置此新范围中的变量.
最直接的方法是宣布和分配myVar:
var Y, myVar = img.parent('a').length > 0;
if (myVar) {
Y = 1;
} else {
Y = 2;
}
// Or Y = myVar ? 1 : 2;
Run Code Online (Sandbox Code Playgroud)
甚至更短,在一个var声明中:
var myVar = img.parent('a').length > 0,
Y = myVar ? 1 : 2;
//...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
205 次 |
| 最近记录: |