noob问题混淆语句块
我经历的ES6功能的网站,我发现这段代码
function f (x, y, z) {
if (y === undefined)
y = 7;
if (z === undefined)
z = 42;
return x + y + z;
};
alert(f(1))
当我不及格y ans z参数为函数,在第4行if (z === undefined)
为真。我不明白的是,编译器如何知道只有第5行是if块的一部分而不是返回语句。
换句话说,编译器如何知道以这种方式来执行它
if (z === undefined) {
z = 42;
}
return x + y + z;
,而不是在这样
if (z === undefined) {
z = 42;
return x + y + z;
}
编译器如何知道return语句不是第二个if语句的一部分?
如果听起来不太合适,请给出一个合适的标题 –
没有(括号)括号的if语句只会计算单个下一个表达式,计算和返回语句是2个表达式,因此只有计算与“if”链接。这就是为什么你应该总是使用大括号 –
如果没有花括号的块只考虑下一行是要执行的代码块。我很确定这是任何语言中的基本语法规则,它允许if body不被大括号包围。含糊不清的原因也是为什么我讨厌不用围绕着大括号的身体。 – chiliNUT