Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.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 if语句中的代码何时执行?_Javascript - Fatal编程技术网

Javascript if语句中的代码何时执行?

Javascript if语句中的代码何时执行?,javascript,Javascript,考虑以下3种情况 var y = 1; if (function f(){}) { y += typeof f; } console.log(y); // "1undefined" 上面的输出表明,函数f(){}只是检查其真实性,但在执行if block之前没有定义 var y = 1; if (y--) { y += typeof f; } console.log(y); // "0undefined" 然而,这里我们得到y的值为0,这意味着if条件中的表达式在

考虑以下3种情况

var y = 1;
if (function f(){}) {
   y += typeof f;
}
console.log(y);     // "1undefined"
上面的输出表明,
函数f(){}
只是检查其真实性,但在执行
if block
之前没有定义

var y = 1;
if (y--) {
   y += typeof f;
}
console.log(y);     // "0undefined"
然而,这里我们得到y的值为0,这意味着
if条件
中的表达式在
if块
之前执行。但是,
if块
不应该被跳过,因为
y--
的计算结果为0,这是一个错误的值,如下所示

var y = 1;
if (0) {
   y += typeof f;
}
console.log(y);     // "1"
上面的输出表明函数f(){}只是检查了它的真实性,但没有定义

命名函数表达式创建的变量仅在其自身范围内共享其名称(
f

您从不创建变量
f
,该变量位于
y+=typeof f可访问的范围内语句


但是当y--的值为0时,不应该跳过if块吗

y--
的计算结果不为0

它计算为
1
,然后
y
递减为
0

if (function f(){})
上面的输出表明函数f(){}只是检查了它的真实性,但没有定义

命名函数表达式创建的变量仅在其自身范围内共享其名称(
f

您从不创建变量
f
,该变量位于
y+=typeof f可访问的范围内语句


但是当y--的值为0时,不应该跳过if块吗

y--
的计算结果不为0

它计算为
1
,然后
y
递减为
0

if (function f(){})
这并不定义
f
,因为它只是一个命名函数表达式。表达式不会在本地范围内以名称
f
声明函数,因此不会创建
f

if (y--)
后减量运算符首先返回
y
的值,然后将其减量。与预减量运算符比较
--y

这些就是你做出这种行为的原因。当“如果执行”是不相关的

这并不定义
f
,因为它只是一个命名函数表达式。表达式不会在本地范围内以名称
f
声明函数,因此不会创建
f

if (y--)
后减量运算符首先返回
y
的值,然后将其减量。与预减量运算符比较
--y


这些就是你做出这种行为的原因。当“if is executed”不相关时。

No,
y--
的计算结果为
1
,而不是
0
。当
--
位于变量之后时,总值与减量之前的值相同。请尝试
y=1;控制台日志(y--);控制台日志(y)我不太确定你在这里问什么。即使是C,你也应该只在第一种情况下读,没有什么,
y--
计算为
1
,而不是
0
。当
--
位于变量之后时,总值与减量之前的值相同。请尝试
y=1;控制台日志(y--);控制台日志(y)我不太确定你在这里问什么。即使是C,你应该只在第一种情况下读,有东西在那里