try/catch块中的return语句是如何工作的?Javascript:try/catch/finally return语句
function example() {
try {
return true;
}
finally {
return false;
}
}
我在期待这个函数的输出是“真”,而是它是“假”!
try/catch块中的return语句是如何工作的?Javascript:try/catch/finally return语句
function example() {
try {
return true;
}
finally {
return false;
}
}
我在期待这个函数的输出是“真”,而是它是“假”!
最后总是执行。这就是它的目的,这意味着它的返回被用于你的情况。
你想改变你的代码,所以它更像是这样的:
function example() {
var returnState = false; // initialisation value is really up to the design
try {
returnState = true;
}
catch {
returnState = false;
}
finally {
return returnState;
}
}
一般来说你永远不希望有一个以上的return语句的功能,这样的事情是为什么。
我认为拥有多个return语句并不总是很糟糕 - 请参阅http://stackoverflow.com/questions/36707/should-a-function-have只有一个回归陈述可供更多讨论。 – Castrohenge 2010-10-01 09:52:09
+1好答案。不同意一个函数返回。 – 2010-10-01 10:07:33
我对一个回报规则不太同意。你不应该从最后回来,虽然(在C#中,它甚至不允许)。 – erikkallen 2010-10-01 10:58:16
当您使用finally
时,该块内的任何代码在该方法退出前触发。由于您在finally
区块中使用了退货,因此它会调用return false
并覆盖try
区块中先前的return true
。
(术语可能不完全正确。)
据我所知,finally
块总是执行,不论是否有内部try
或不return
声明。 Ergo,你会得到return
语句在finally块内返回的值。
我在Ubuntu中对Firefox 3.6.10和Chrome 6.0.472.63进行了测试。该代码可能在其他浏览器中的行为有所不同。
为什么你得到错误是你在finally块中返回。 finally块应该总是执行。所以你return true
更改return false
function example() {
try {
return true;
}
catch {
return false;
}
}
最后应该总是在一个try catch块结束时运行,这样(通过规范)就是为什么你越来越假返回。请记住,不同的浏览器具有不同的实现是完全可能的。
IE8,Firefox 3.6和Chrome 6:都一样;) – bonfo 2010-10-01 09:47:59
根据ECMA-262(5ED,2009年12月),在第96:
生产
TryStatement : try Block Finally
如下评价:
- 令B为评价块的结果。
- 设F是最后评估的结果。
- 如果F.type是正常的,返回B.
- 返回F.
而且从第36:
完成类型被用来解释语句的行为(
break
,continue
,return
和throw
)执行非局部控制转移。于完成类型的值的形式为(类型,值,目标),其中类型是normal
一个,break
,continue
,return
,或者throw
,值的三元组是任何ECMAScript语言值或为空,并且目标是任何ECMAScript标识符或为空。
很明显,return false
将设置最后为回报,导致try ... finally
做4.返回˚F结束类型。
这里最明确的答案 – 2018-02-27 05:00:09
您的问题文本和标题询问'try'/**'catch' **,但您的代码使用'finally'? – Bergi 2017-09-21 04:37:38