throw 和return的区别,A函数里面执行B函数 B函数异常后 不再执行A函数

function aFun() {
  try {
    bFun();
    console.log(22222222222);
  } catch (e) {
    // 如果bFun中抛出异常,中止aFun的执行
    console.log(e.message);
  }
}

function bFun() {
  let a = 1, b = 1;
  
  if (a === b) {
    throw new Error('Stopped by bFun'); // 抛出异常,停止aFun
  }

  // bFun 中可能还有很多代码
  console.log('Executing rest of bFun');
}

// 测试调用
aFun(); // 此时将不会输出22222222222, 而是输出Stopped by bFun

throwreturn 是 JavaScript 中两种完全不同的控制流机制,使用它们的区别主要在于它们的目的和作用范围:

return

  • 目的:用于从函数中返回一个值,并终止该函数的执行。
  • 作用范围:仅在函数内有效。
  • 使用场景:在需要从函数中返回一个值或提前退出函数时使用。
function exampleReturn() {
  console.log("Before return");
  return "Returning value"; // 返回值,并终止函数执行
  console.log("After return"); // 不会执行
}

let result = exampleReturn();
console.log(result); // 输出: "Returning value"

throw

  • 目的:用于抛出一个异常,终止当前代码的执行,并将控制权交给最近的异常处理器(通常是 try...catch 语句)。
  • 作用范围:可以在任何地方使用,不局限于函数内部;会传播到调用堆栈的上层,直到找到一个 catch 块来处理它。
  • 使用场景:在遇到错误或异常情况时使用,需要停止执行并通知调用者有错误发生。
function exampleThrow() {
  console.log("Before throw");
  throw new Error("An error occurred"); // 抛出异常,终止执行
  console.log("After throw"); // 不会执行
}

try {
  exampleThrow();
} catch (e) {
  console.log(e.message); // 输出: "An error occurred"
}

主要区别

  1. 控制流

    • return:仅影响当前函数的执行,终止函数并返回指定值。
    • throw:影响整个调用堆栈,抛出异常并将控制权交给最近的异常处理器。
  2. 使用目的

    • return:用于正常的函数返回。
    • throw:用于异常处理,表示错误或异常情况。
  3. 后续代码执行

    • return:函数中的代码在 return 之后不会执行,但 return 之后的代码在调用堆栈上层的代码会继续执行。
    • throw:不仅终止当前函数的执行,还会影响调用堆栈的上层代码,直到找到一个 catch 块来处理异常。

结合以上区别,当你希望在某个条件下中止函数的执行并向调用者返回一个特定值时,使用 return。当你遇到错误或异常情况,需要停止执行并通知调用者有错误发生时,使用 throw

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值