callback() 回调函数

JS是单线程函数,单线程所有的函数执行都是同步的,前一个函数执行完之后再执行下一个函数,这样的话如果排队的函数很多就会造成页面长时间无响应

所以,就要用到了JS异步callback

怎么理解callbck  ?

字面上理解下来就是,回调就是一个函数的调用过程。那么就从理解这个调用过程开始吧。函数a有一个参数,这个参数是个函数b,

当函数a执行完以后执行函数b。那么这个过程就叫回调。

代码如下

//定义主函数,回调函数作为参数
function A(callback) {
    callback();  
    console.log('我是主函数');      
}

//定义回调函数
function B(){
    setTimeout("console.log('我是回调函数')", 3000);//模仿耗时操作  
}

//调用主函数,将函数B传进去
A(B);

//输出结果
我是主函数
我是回调函数

 call 和apply 都可以改变作用域的this 的指向

1、call :语法 call(obj,p1,p2) 

obj 是更改之后 this 指向的对象(必选),p1,p2是原始函数要传的参数(可选)

//在浏览器的window 全局对象添加一个name,在docment对象添加一个name,声明一个对象添加name属性

ios 回调html5 js 回调 this_主函数

 

ios 回调html5 js 回调 this_单线程_02

 

ios 回调html5 js 回调 this_单线程_03

 2、apply 和 call一样,也是改变作用域的this 的指向,只是参数传递的方式不一样,apply以数组形式多个传参

ios 回调html5 js 回调 this_ios 回调html5_04

输出:Bill Gates,Seatle,USA

ios 回调html5 js 回调 this_主函数_05

 

 3、bind() :将函数绑定到某个对象,bind()会创建一个函数,函数体内的this对象的值会被绑定到传入 bind() 第一个参数的值

 

例1:

ios 回调html5 js 回调 this_单线程_06

 

ios 回调html5 js 回调 this_ios 回调html5_07

例2:

 

ios 回调html5 js 回调 this_单线程_08

 

 定义里说了,bind会将函数的this对象的值会被绑定到 bind的第一个参数值,那这里 f 函数里的this对象就指向了{x:1}这个对象

从第二个参数起,会依次传递给原始参数,2就是原始函数的y,函数m(3)中的3就是原始函数的参数z

 二、3者最大区别

  ①、执行方式不同:

    call、apply 都是页面加载之后同步立即执行

    bind() 不会立即执行,而是返回一个新的函数,需要调用执行

  ②、修改this指向性质不同:

    call、apply都是临时修改一次指向,再次调用原函数的时候,原函数的this指向不变。

    bind返回的是一个新的函数,this指向永远指向新的函数。

    

ios 回调html5 js 回调 this_主函数_09

        

 

     

ios 回调html5 js 回调 this_主函数_10

 

    

ios 回调html5 js 回调 this_单线程_11

 

   

ios 回调html5 js 回调 this_ios 回调html5_12

 

 

  ③、传参方式不同(上面有例子)