在JavaScript 中,函数是比较奇怪的,但它确确实实是对象。确切地说,函数是用 function 构造函数创建的 function 对象。
function 对象包含一个字符串,字符串包含函数的 JavaScript代码。
看下面代码:
只写变量名 say 返回的将会是 say方法本身,以字符串的形式表现出来。
而在变量名后加 () 返回的就会使 say方法 调用后的结果。
在JavaScript中,函数可以作为参数被传递
1. 将say方法作为参数传递给 execute方法
2. 直接将匿名函数作为参数传递给 execute方法
回调函数 也被叫做 高阶函数,所谓高阶函数 是指 函数作为参数被传递或者函数作为返回值输出,简单点说就是操作函数的函数叫做高阶函数。 把一个函数 作为参数传递给 另一个函数,并在需要的时候方便调用这个可执行代码(回调函数)。
做个比喻:
你到个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货。在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,店里后来有货了叫做触发了回调关联的事件,店员给你打电话叫做调用回调函数,你到店里去取货叫做响应回调事件。
回调函数的易混淆点 -- 传参
两种传参方式:
1、 将回调函数的参数作为与回调函数同等级的参数进行传递
2、 回调函数的参数在调用回调函数内部创建
回调是闭包的简单使用,能访问外层定义的变量。
注意 回调函数的 this 指向!
例子:
直接调用 obj. fun(); 输出10;
当我们把这个方法当做参数传递给 con方法之后,调用 callback的是 window, this指向 window,所以输出的是100。
回调函数的好处:
回调函数可以避免重复代码、加强代码可维护性、可读性,一般用在异步编程、事件监听处理、定时器计时器等。