与块语句混淆
Confusion with block statements
菜鸟问题
我在浏览 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 块的一部分而不是 return 语句。
也就是说,编译器怎么知道这样执行的
if (z === undefined) {
z = 42;
}
return x + y + z;
而不是这样
if (z === undefined) {
z = 42;
return x + y + z;
}
编译器如何知道 return 语句不是第二个 if 语句的一部分?
如果省略大括号,则只有条件后面的单个语句是运行。 z = 42;
是条件后面的单个语句,因此它是唯一一个 运行。
如果您需要 运行 多个语句,请将它们包装在一个块中。
需要注意的是,这并不是 ES6 特有的,甚至 Javascript 也不是特有的。大多数使用 if 语句和块的著名语言都遵循此 "rule".
还应注意,省略大括号通常不是一个好主意,除非您有充分的理由和用例。它通常会导致代码被假定为块的一部分,而实际上却不是。 Even Apple was bitten by this bad habit.
这是大多数语言的已知概念,您可以用这种方式编写代码。这意味着如果在 if/while 等之后没有大括号,则只执行第一条语句。否则,一切都在大括号中。这可能会导致您的代码产生误解,因此即使只有一条语句也请使用大括号(以后可能会有两条或更多条语句,这是很好的做法)。
菜鸟问题
我在浏览 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 块的一部分而不是 return 语句。
也就是说,编译器怎么知道这样执行的
if (z === undefined) {
z = 42;
}
return x + y + z;
而不是这样
if (z === undefined) {
z = 42;
return x + y + z;
}
编译器如何知道 return 语句不是第二个 if 语句的一部分?
如果省略大括号,则只有条件后面的单个语句是运行。 z = 42;
是条件后面的单个语句,因此它是唯一一个 运行。
如果您需要 运行 多个语句,请将它们包装在一个块中。
需要注意的是,这并不是 ES6 特有的,甚至 Javascript 也不是特有的。大多数使用 if 语句和块的著名语言都遵循此 "rule".
还应注意,省略大括号通常不是一个好主意,除非您有充分的理由和用例。它通常会导致代码被假定为块的一部分,而实际上却不是。 Even Apple was bitten by this bad habit.
这是大多数语言的已知概念,您可以用这种方式编写代码。这意味着如果在 if/while 等之后没有大括号,则只执行第一条语句。否则,一切都在大括号中。这可能会导致您的代码产生误解,因此即使只有一条语句也请使用大括号(以后可能会有两条或更多条语句,这是很好的做法)。