call
1.立即执行函数
2.改变this指向
3.传参 .call(thisObj, arg1, arg2, arg3, arg4); //后面的参数都是实参
4.适用于继承
apply
1.立即执行函数
2.改变this指向
3.传参 .apply(thisObj, [args]); //后面的参数都是实参
4.有关数组的操作
<script>
var arr = [1, 2, 3]
var max = Math.max.apply(Math, arr)
console.log(max)
</script>
function show(a,...arguments){
console.log(...arguments)
}
show(1,2,3) //2 3
bind()
1.不会立即执行函数
2.改变this指向
3.传参 .call(thisObj, arg1, arg2, arg3, arg4); //后面的参数都是实参
4.适用于不会立即调用但又需要改变this,比如定时器
<button>点击禁用3秒</button>
<script>
var num = {}
var btn = document.querySelector("button")
btn.onclick = function() {
this.disabled = true
setTimeout(function() {
this.disabled = false
}.bind(this), 3000) //this btn
}
</script>
//如果不使用bind
var btn=document.querySelector("button")
btn.onclick=function(){
btn.disabled=true
setTimeout(function(){
btn.disabled=false
},3000)
}