js中的回调函数

  一般我们使用函数,在顺序上是先定义函数,在去调用它。

 

  而回调函数则在写代码的过程中反了过来,先去设计函数的调用场景,然后到了需要调用的时候再去定义它。

 

  但无论如何,函数的执行过程都是一样的,某个对象调用一个已经被定义了的函数,即便到了调用的时候才去定义,但还是得等定义好了才能进行调用不是吗?计算机的执行过程是一样的。所谓的回调,不过是针对人而言的。

 

  匿名的回调函数里面能不能在其括号里进行参数传递?答案是可以的,函数的传参有两个地方共同实现,首先是定义函数时,然后是调用函数时,但在js里面,似乎定义函数时写的参数不是那么重要,你写不写都无所谓,所以关键便在于调用函数的时候传入的参数。我们都知道,回调函数在写法上是先进行调用场景编程的,所以如果在函数中调用回调函数时没有进行传参,那么你在通过匿名函数定义它的时候,传入什么都是无用的,因为你调用的时候什么也没穿进去呀,就像你给朋友的信中说我去看你的时候会带礼物,但是真正到了你去看他的时候却什么也没有带,他当然什么也收不到呀。只要在调用回调函数的地方进行了传参,那么在定义回调函数的时候括号里写不写参数都一样,反正在调用的时候会传进来的。

 

  这里比较绕的地方在于,其实我们在用匿名函数去定义回调函数的时候,其实就是到了调用它的时候了,所以你在之前设计回调函数的调用之时写在括号里面的参数,此时必须已经存在于调用回调函数的对象的作用域中,否则巧妇难为无米之炊,报错是已经是很委婉的抗议方式了。

 

  注意,上面这段话的重点你明白了吗,如果回调函数的调用者是window对象,传入回调函数的变量必须在window对象能访问到的地方才行,而回调函数所在的那个函数内的变量,window是不能访问到的,明白了吗?那如果要将这个函数内的数据传入回调函数呢,可以创建全局变量呀,当然这不是个好办法,其实可以在window作用域建一个对象,然后将这个对象作为参数传入包含回调函数的那个函数,因为对象作为参数传递时是传址的,因而window始终能够访问到它。所以无论你在这个函数中对对象做了什么修改,在调用回调函数时,该对象都是最新的状态,包含已经处理完的数据,将这个对象再作为参数传入回调函数中,交到外部再做符合实际情况的处理。

 

  

posted @ 2020-01-07 18:43  anch  阅读(276)  评论(0)    收藏  举报