引人深思:返回IF语句
food for thought: return in if statement
我可以在任何地方放置返回,例如在函数中,在if块中,在案例块中。
为什么这不起作用:
(x == "good") ? (return("works")):"";
更新:我知道我可以这样做:
return (x == "good") ? ("works"):"";
只是想知道为什么第一种情况是不可接受的。
这是因为三元运算的语法是这样的:
条件 ? expr1 : expr2
从技术上讲,return 语句不被视为表达式。
编辑:这里有一些更多信息。上面用语言的语法来解释它,但这里有一点关于原因的推理。
我之前实际上已经深入研究过这个问题,因为我一直认为能够做这样的事情会很酷:
someFlag && return;
而不是
if (someFlag) return;
然而,问题在于表达式总是需要计算到某物。然而,此要求与 return 语句的角色不一致,它与(可选(返回结果一起,也会立即终止当前函数的执行。 当前函数的这种终止在逻辑上与计算 return 语句本身的值的需求不一致,如果它确实是一个表达式。
鉴于这种不一致,语言作者显然选择不允许返回语句充当表达式。 希望我设法以一种有意义的方式表达出来。
您是否正在尝试这样做:
return (x == "good") ? "works":"";
return 不是一个函数,所以 return("works"( 是不正确的。或者,您也可以执行以下操作:
var x = "bad";
var y = (x=="good")? "works" : "";
return y;
但这更冗长。 因此,为了回答您的问题,您可以将 return 放在函数中的任何位置,但之后的任何内容都不会被执行。所以
function x ()
{
var str = "";
return "I love puppies.";
str = "me too!" //this won't ever execute, because return exits the function.
}
唯一的例外是变量声明,因为无论您将它们放在何处,变量都会在开始时自动声明。
function y (){
return "";
var x;
}
真的是:
function y (){
var x;
return "";
}
return
关键字应该排在第一位:
return (x == "good") ? "works": "";
原因是return x;
是一个声明。不能将(return x)
用作表达式。
,但并非所有语句都可以在需要表达式的地方使用。
return
关键字标记语句的开头。它不是一个表达式,你可以与三元运算符一起使用。
基于javascript的这种语法,三元运算符定义为:
OrExpression ? AssignmentExpression : AssignmentExpression
而return
是一个statement
(好吧,无论如何,一个的开始(。
无论如何,以三元表达式这样的"表达"(阅读:"我想变得聪明"(形式弄乱控制流不会被我认识的任何人推荐。 if 语句是相同数量的字符:
if(x==good) return x;
(x==good)?(return x)
因为"几乎所有东西都是一种表达"还没有进入语言。
你是说如果x是"好",那么返回,否则什么都不做?在这种情况下,
if (x == "good") return "works";
能解决问题。此外,return
不是一个函数,它是一个 javascript 标记,因此不应将括号与 return
一起使用。
所有以"return"开头的答案都与我认为 OP 在他的三元操作中的意图不同。 我猜OP想要
x == "good" ? return "works" : "";
意思是
if(x == "good") {
return works;
}
else {
""; //does nothing because the statement ""; has no side effects
}
它不这样做,因为格式是
statement1 ? statement2 : statement3;
所有语句都有副作用,但三元运算符只考虑返回值(在语句 1 的情况下,只是它的真实性(。
尽管 ?: 最好用"if"和"then"来理解,但在更接近语法级别时,应该将其视为考虑副作用和返回值的表达式。 如果你了解 x++ 和 ++x 之间的区别,你将能够理解三元运算符。
例如,这里有一些出于同样原因而非法的非法陈述。
if( (return 5) == 5) {
//...
}
if (loadUserStats(return userId)) == "FAILED") {
throw error("oops");
}
x = return y++;
- 可以't让我的if语句处理js中的html表单输入
- 如何在ReactJS JSX中执行嵌套的if-else语句
- 如何在 API 调用后和 if 语句中启用提交按钮
- 带有多个elseif的Javascript if语句
- Sharepoint JScript if语句未执行
- Javascript:If-then语句在函数中不起作用
- for循环中的javascript if语句找不到==
- jquery if语句返回return wong语句
- 在if语句下的html中使用javascript变量
- 将错误与if语句混淆
- 如何检查if/else语句中的随机条件
- 循环通过数组的If语句不起作用
- jQuery模板中的If语句
- 如何从数据库中回显If语句
- 如何减少if语句的数量
- Node.js-承诺和锥形语句(if、switch等)-如何构建
- 如何在嵌套ng重复指令中使用控制语句(if语句)
- 如何创建语句if包含"&"
- If语句- If主体有一个类remove在滚动原生javascript
- Javascript中的if语句- if - else问题