call,apply,blind的区别

630 阅读1分钟

call()

call() 方法使用一个指定的 this 值和单独给出的一个或多个参数来调用一个函数。 语法:

function.call(thisArg, arg1, arg2, ...)

返回值:使用调用者提供的 this 值和参数调用该函数的返回值。若该方法没有返回值,则返回 undefined。

function fn(){
    console.log(this)
}
fn() //这是的this就是window
fn.call(1) //Number{1},this指向数字
fn.call(ture)  //Boolean{ture},this就是bool

apply()

apply() 方法调用一个具有给定this值的函数,以及作为一个数组(或类似数组对象)提供的参数。

语法:

function.apply(thisArg, [argsArray])

返回值:调用有指定this值和参数的函数的结果。

function fn (a,b){
    reutrn a+b
}
fn.apply(undefined,[1,2]) //和this的用法差异不大,只是在传参的时候,apply只支持数组形式

bind

bind() 方法创建一个新的函数,在 bind() 被调用时,这个新函数的 this 被指定为 bind() 的第一个参数,而其余参数将作为新函数的参数,供调用时使用。

语法:

function.bind(thisArg[, arg1[, arg2[, ...]]])

返回值:返回一个原函数的拷贝,并拥有指定的 this 值和初始参数。

// 同样的例子,bind并不会立即执行,它会拷贝原函数,创建一个新的函数,

function fn(a,b){
    return a+b
}
let x = fn.bind(undefined,1,2)
x()  //3