是否有可能从其内部函数中突破外部函数?
(function one(){
var foo = (function two(){
if(true){
return true; //all good
}else{
//how can we break function one here?
})();
//extra statements only executed if foo is true
})();
没有"返回"对? :P
更新
全部谢谢 - 因为我怀疑"返回"我一直在寻找的功能是不可能的。但是根据您的输入/提示,我重新编写了代码并使用了try / catch块。在JS中有很多方法可以给猫皮肤!
答案 0 :(得分:3)
return
仅适用于其使用的函数。
你可以做的是让two()
返回一个布尔值
而不是评估two()
if
语句中的one()
function two() {
// Some logic here...
var isError = true; // sometimes is false :)
// Internals
if (isError) {
console.log("Something is wrong");
}
// Finally return a boolean
return isError;
}
(function one(){
// `two()` returns a boolean, true if there's an error.
// `return` will stop furthere execution of `one()`
if( two() ) return;
console.log("This will not log if there was an error")
})();
答案 1 :(得分:1)
在您的示例代码中,外部函数最好测试foo
,但在更复杂的代码中,异常可能是合适的:
;(function() {
var foo = (function() { return true })()
if (!foo) return;
console.log('reached because foo was true')
})()
;(function() {
try {
;(function() {
var foo = (function() { throw new Error('fail') })()
/* only reached if an error wasn't thrown */
})()
}
catch (error) {
console.log('Something went wrong: ' + error)
}
})()
输出:
reached because foo was true
Something went wrong: Error: fail
这种愿望在JavaScript中可能比在类似语言中更常见,因为JavaScript提供范围的唯一方法是使用函数体,并且跨越函数边界的控制流选项更少。但是如果你纯粹使用一个自执行函数来提供一个范围,而不是保持函数来关闭变量,那么当你遇到控制流时,就不会那样做像这样的情况。
答案 2 :(得分:0)
//我们怎么能在这里打破第一个功能?
返回false
?
var div = document.querySelector("div");
var buttons = document.querySelectorAll("button");
var process = function process(value) {
return (function one(val) {
var foo = (function two(bool) {
if (bool) {
return true; //all good
} else {
return false //how can we break function one here?
}
})(val);
//extra statements only executed if foo is true
// if `foo` : `true` do stuff
if (foo) alert(foo);
// return `foo`
return foo
})(value)
};
var fn = function(e) {
div.innerHTML = process(e.target.textContent === "false" ? false : true);
}
buttons[0].onclick = fn;
buttons[1].onclick = fn;

<button>true</button>
<button>false</button>
<div></div>
&#13;
答案 3 :(得分:0)
函数的一般概念是它将返回它所驻留的单个函数的数据类型。返回只是一种语言功能,用于实现从函数中返回数据的想法。因此,无法应用执行 return-return 的概念。
但在这个范例中,您解决的问题与控制流更相关。您选择的解决方案应该基于您在代码中最清晰地表达想法的方式。
根据您提出此问题的原因,如果您在应用程序中受到某个逻辑的挑战,并且不仅仅询问有关该语言的技术问题,我建议您发布一个代码示例,让我们了解您的目标的意图。因为这是选择最佳解决方案的关键因素。
当然,您可以通过各种方式实施解决方案。例外,有状态或功能性解决方案。但是你需要为这份工作选择合适的工具。