if语句中的代码什么时候执行?

时间:2018-08-20 14:34:53

标签: javascript

请考虑以下三种情况。

var y = 1;
if (function f(){}) {
   y += typeof f;
}
console.log(y);     // "1undefined"

上面的输出表明function f(){}仅被检查其真实性,而在执行if block之前未定义。{p>

var y = 1;
if (y--) {
   y += typeof f;
}
console.log(y);     // "0undefined"

但是,这里我们得到y的值为0,这意味着if condition中的表达式在if block之前执行。但是不应该跳过if block,因为y--的计算结果为0,这是一个假值,如下所示。

var y = 1;
if (0) {
   y += typeof f;
}
console.log(y);     // "1"

2 个答案:

答案 0 :(得分:3)

  

上面的输出表明仅检查了函数f(){}的真实性,但未定义

一个命名函数表达式创建一个仅在其自己的作用域内共享其名称(在这种情况下为f)的变量。

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


  

但是不应跳过if块,因为y--的值为0

y--的值为0。

其计算结果为1,然后然后y递减为0

答案 1 :(得分:2)

if (function f(){})

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

if (y--)

后减量运算符首先返回y的值,然后然后将其减量。与递减运算符--y进行比较。

这就是您得到行为的原因。与“是否执行”无关。