apply
- apply(this的指向,[函数的参数,以数组形式传参])
- 如果第一个参数未null或者undefined,那么this默认指向window
- 此方法会将原函数立即执行,并且知识临时改变一次this的指向
call
- call(this的指向,参数1,参数2,参数3......)
- 参数为参数列表形式,且必须一次性传入所有参数
- 如果第一个参数未null或者undefined,那么this默认值指向window
- 此方法会将原函数立即执行,并且知识临时改变一次this的指向
bind
- bind(this的指向,参数1,参数2,参数3......)
- 参数为参数列表形式,参数可以分批次传入,最后函数执行的会将参数连在一起传入
- 如果第一个参数未null或者undefined,那么this默认值指向window
- 此方法不会将原函数立即执行,他会返回一个永久改变this指向的函数
小结
- 相同点
- 都可以改变this的指向
- 当第一个参数为null或undefined时,this默认指向window
- 可以利用上一个特点求取一个数组中的最大值
var arr=[1,10,5,8,3,12];
//apply实现
console.log(Math.max.apply(null, arr)); //12
//call实现
console.log(Math.max.call(null,arr[0],arr[1],arr[2],arr[3],arr[4],arr[5])); //12
//bind实现
var max=Math.max.bind(null,arr[0],arr[1],arr[2],arr[3])
console.log(max(arr[4],max(arr[5])); //12,分两次传参
- 不同点
- apply和call会立即执行原函数,并且只是暂时改变this的指向
- bind不会立即执行原函数,而是返回一个永久改变this指向的函数