在JavaScript 中,函数是比较奇怪的,但它确确实实是对象。确切地说,函数是用 function 构造函数创建的 function 对象。

function  对象包含一个字符串,字符串包含函数的 JavaScript代码。

看下面代码:

javascript 回调传参 javascript 回调函数 带参数_JavaScript

只写变量名  say 返回的将会是  say方法本身,以字符串的形式表现出来。
而在变量名后加 ()  返回的就会使 say方法 调用后的结果。

在JavaScript中,函数可以作为参数被传递

1. 将say方法作为参数传递给 execute方法

javascript 回调传参 javascript 回调函数 带参数_JavaScript_02

2. 直接将匿名函数作为参数传递给 execute方法

javascript 回调传参 javascript 回调函数 带参数_前端_03

回调函数 也被叫做 高阶函数,所谓高阶函数 是指 函数作为参数被传递或者函数作为返回值输出,简单点说就是操作函数的函数叫做高阶函数。  把一个函数 作为参数传递给 另一个函数,并在需要的时候方便调用这个可执行代码(回调函数)。

做个比喻:

你到个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货。在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,店里后来有货了叫做触发了回调关联的事件,店员给你打电话叫做调用回调函数,你到店里去取货叫做响应回调事件


回调函数的易混淆点 -- 传参

 

两种传参方式:

1、 将回调函数的参数作为与回调函数同等级的参数进行传递

javascript 回调传参 javascript 回调函数 带参数_JavaScript_04

2、 回调函数的参数在调用回调函数内部创建

javascript 回调传参 javascript 回调函数 带参数_前端_05


回调是闭包的简单使用,能访问外层定义的变量。

注意 回调函数的 this 指向!

例子:

直接调用 obj. fun(); 输出10;

当我们把这个方法当做参数传递给 con方法之后,调用 callback的是 window,  this指向 window,所以输出的是100。

javascript 回调传参 javascript 回调函数 带参数_javascript 回调传参_06

 

 

回调函数的好处:

回调函数可以避免重复代码、加强代码可维护性、可读性,一般用在异步编程、事件监听处理、定时器计时器等。