Javascript if语句中的代码何时执行?
考虑以下3种情况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条件中的表达式在
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,你应该只在第一种情况下读,有东西在那里