You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript回调函数入门解惑:示例代码执行逻辑与参数疑问

JavaScript回调函数分步解析:从你的示例说起

一、为什么cb既是参数又被调用?

在JavaScript里,函数是一等公民——简单说就是函数可以像普通变量一样被传递、赋值。

你的代码里:

  • 当调用add(2, 3, callback)时,你把callback这个函数本身当作参数传给了add,此时add函数里的参数cb就相当于callback的“别名”。
  • 在add内部写cb(r),本质就是调用你传进来的那个callback函数。这么做的目的是:让add完成核心计算(a+b)后,把结果交给你指定的函数去处理(比如这里的打印操作)——这就是回调函数的核心逻辑:把“后续要执行的任务”传给主函数,主函数完成自己的工作后,触发这个后续任务。

二、代码执行的完整分步流程(纠正“回调先于add执行”的误解)

你的代码实际执行顺序是先运行add函数的逻辑,再执行回调,具体步骤如下:

  1. 首先定义add函数:这一步只是告诉JavaScript“有这么一个函数”,不会执行函数内部的代码。
  2. 接着定义callback函数:同样只是声明函数,不执行内部代码。
  3. 执行add(2, 3, callback):这才开始真正运行add的内部逻辑:
    • 第一步:计算a + b,得到2+3=5,赋值给变量r。
    • 第二步:执行cb(r),也就是调用传进来的callback函数,并且把r=5作为参数传给它。
    • 第三步:进入callback函数内部,执行console.log('This is the result', 5),终端打印出对应的内容。
    • 第四步:callback函数执行完毕,回到add函数,add的所有代码执行完成,整个流程结束。

你觉得回调先执行,只是因为add函数本身没有输出内容,只有回调里有console.log,所以看起来好像回调先跑,但实际上add的计算逻辑是在回调执行前完成的。

内容的提问来源于stack exchange,提问作者JAR.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 15:50:20