Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript代码语义_Javascript_Semantics - Fatal编程技术网

Javascript代码语义

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是在任何赋值之前定义的,它被提升到其封闭范围的顶部

当我运行此代码时,myVar(第一次被宣布)的值为
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;
//...