bind 是返回对应函数,便于稍后调用;apply 、call 则是立即调用 。
下面就以这两个函数为例
function one(){
console.log('name',this.name)
console.log('value','one')
}
function two(){
console.log('name',this.name)
console.log('value','two')
}
one()
// name undefined
// value one
two()
// name undefined
// value two
one.apply(one)
// name one
// value one
one.apply(two)
// name two
// value one
function printThis(){
console.log(this)
}
printThis.apply(); //window
printThis.apply(null); //window
printThis.apply(undefined); //window
printThis.apply(1); //Number
printThis.apply(''); //String
printThis.apply(true); //Boolean
apply、call 二者而言,作用完全一样,只是接受参数的方式不太一样。
bind 和其他两者最大区别就是不会立即执行 而是返回一个函数
viod call(thisArg,...argArray)
viod apply(thisArg,?argArray)
Function bind(thisArg,...argArray)