#每天一个知识点# day17
js中call、apply、bind的区别
都是用来改变某一个函数中THIS关键字指向的
用法:
 call
   [fn].call([this],[param]...)
   fn.call:当前实例(函数FN)通过原型链的查找机制,找到Function.prototype上的call方法  =>function call(){[native code]}
   fn.call():把找到的call方法执行

   当call方法执行的时候,内部处理机制
    1.首先把要操作函数中的THIS关键字变为CALL方法第一个传递的实参值
    2.把CALL方法第二个及第二个以后的实参获取到
    3.把要操作的函数执行,并且把第二个以后的传递进来的实参传给函数
 apply
 和call基本上一模一样,唯一区别在于传参方式
   fn.call(obj,10,20)
   fn.apply(obj,[10,20]) APPLY把需要传递给FN的参数放到一个数组(或者类数组)中传递进去,虽然写的是一个数组,但是也相当于给FN一个个的传递
 bind
 语法和call一模一样,唯一的区别在于立即执行还是等待执行
   fn.call(obj,10,20) 改变FN中的THIS,并且把FN立即执行
   fn.bind(obj,10,20) 改变FN中的THIS,此时的FN并没有执行(不兼容IE6~8)
展开
评论