JavaScript回调函数入门解惑:示例代码执行逻辑与参数疑问
JavaScript回调函数分步解析:从你的示例说起
一、为什么cb既是参数又被调用?
在JavaScript里,函数是一等公民——简单说就是函数可以像普通变量一样被传递、赋值。
你的代码里:
- 当调用
add(2, 3, callback)时,你把callback这个函数本身当作参数传给了add,此时add函数里的参数cb就相当于callback的“别名”。 - 在
add内部写cb(r),本质就是调用你传进来的那个callback函数。这么做的目的是:让add完成核心计算(a+b)后,把结果交给你指定的函数去处理(比如这里的打印操作)——这就是回调函数的核心逻辑:把“后续要执行的任务”传给主函数,主函数完成自己的工作后,触发这个后续任务。
二、代码执行的完整分步流程(纠正“回调先于add执行”的误解)
你的代码实际执行顺序是先运行add函数的逻辑,再执行回调,具体步骤如下:
- 首先定义
add函数:这一步只是告诉JavaScript“有这么一个函数”,不会执行函数内部的代码。 - 接着定义
callback函数:同样只是声明函数,不执行内部代码。 - 执行
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.
相关产品推荐
相关产品推荐

