三十五.回调函数

269 阅读2分钟

什么是回调函数

函数作为参数传递给另外一个函数,这个作为参数的函数就是回调函数。

image.png

image.png

函数fm是回调函数。在开发中,函数fn是一个工具函数,执行某个功能后产生业务数据再调用回调函数执行业务代码。先执行工具函数的代码产生业务数据后,再将业务数据传给回调函数,最后执行回调函数中的业务代码。

ps:当有业务数据传给回调函数处理时,回调函数需要写形参变量接收实参传入的业务数据,否则会报错。

image.png

image.png

报错的原因:回调函数fm的作用域是在生成函数fm写函数fm代码的地方,而不是调用函数fm的地方,则回调函数fm的作用域是在全局作用域而不是在函数fn的局部作用域,运行函数fm也是在全局作用域执行函数体内的代码,全局作用域没有全局变量b且也不能访问到函数fn的局部作用域中的局部变量b。

回调函数中的this指向

image.png

image.png

代码从上往下,第一个this离的最近的嵌套关系的function是函数axios,其调用代码是axios()则this指向window对象。

第二个this离的最近的嵌套关系的function的调用代码是obj.method()则this指向obj对象。

第三个this离的最近的嵌套关系的function的调用代码是callback()则this指向window对象。

在实际开发中,希望上面的案例的回调函数中的this指向对象obj,其解决方法之一:用一个变量保存指向obj对象的this。

image.png

image.png

回调函数的作用域是在obj对象的method方法的function的大括号的局部作用域中,运行回调函数就是在这个回调函数的作用域中,回调函数自己局部作用域中没有声明和隐式声明的变量self,则取值时访问到外层局部作用域中的self就是指向obj对象的this。