繁体   English   中英

在Javascript中,是否可以停止内部函数的外部函数执行?

[英]In Javascript, is it possible to stop outer function execution from inner function?

是否有可能从外部功能中脱颖而出?

(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

UPDATE

谢谢大家-因为我怀疑我正在寻找的“返回返回”功能是不可能的。 但是根据您的输入/提示,我重新编写了代码并使用了try / catch块。 在JS中,有很多方法可以给猫皮!

return仅适用于所使用的函数。

您可以做的是使two()返回一个布尔值。
比在one()if语句内求值two() 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") })(); 

在示例代码中,外部函数最好测试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提供作用域的唯一方法是使用函数体,并且跨函数边界的控制流选项更少。 但是,如果您纯粹是使用自执行函数来提供作用域,而不是一直使用该函数来关闭变量,那么当您遇到这样的控制流情况时, 请不要这样做

//我们如何在这里中断函数?

返回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> 

函数的一般想法是,它将为它所驻留的单个函数返回数据类型。 Return只是一种语言功能,用于实现从功能返回数据的想法。 因此,无法执行执行返回-返回的概念。

但是在此范例中,您要解决的问题与控制流更加相关。 您选择的解决方案应基于如何在代码中最清晰地表达想法。

根据您提出此问题的原因,如果您正受到应用程序中某些逻辑的挑战,而不仅仅是询问有关该语言的技术问题,我建议您发布代码示例,以使我们能够理解您目标的意图。 因为这是选择最佳解决方案的关键因素。

当然,您可以通过各种方式实施解决方案。 异常,状态或功能解决方案。 但是您需要选择适合该工作的工具。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM