call、apply、bind三者的用法和区别

1、call

call、apply、bind都是改变this指向的方法

1、非严格模式

如果不传参数,或者第一个参数是nullnudefinedthis都指向window

 2、严格模式

第一个参数是谁,this就指向谁,包括null和undefined,如果不传参数this就是undefined

2. apply 

1、apply:和call基本上一致,唯一区别在于传参方式

apply把需要传递给fn的参数放到一个数组(或者类数组)中传递进去,虽然写的是一个数组,但是也相当于给fn一个个的传递

fn.call(obj, 1, 2);
fn.apply(obj, [1, 2]);

3.bind

bind:语法和call一模一样,区别在于立即执行还是等待执行,bind不兼容IE6~8

fn.call(obj, 1, 2); // 改变fn中的this,并且把fn立即执行

fn.bind(obj, 1, 2); // 改变fn中的this,fn并不执行

this改变为obj了,但是绑定的时候立即执行,当触发点击事件的时候执行的是fn的返回值undefined

上一篇:作用域


下一篇:现代JavaScript 教程(JavaScript基础知识)总结