js中 .bind() .call() .apply()容易忽略的区别

三个的功能大家应该都熟知,这里记录一下最基本也是最容易忽视的一个区别:

.bind()方法调用之后不会立即调用改变this的函数,需要手动调用一下才能算是真的调用,如果没有调用之前传参,这时候函数会暂时保留传递过来的值,当作arguments中按下标排序的一个,当下次真正调用的时候,预传递的参数会占用其中一个形参。

.call()和.apply()方法都会再调用该方法的时候直接调用了需要改变this的函数,传递的参数直接当作形参传递进去,不会保留。

例如:

function f(y, z){
    return this.x + y + z;
}
var m = f.bind({x : 1}, 2);
console.log(m(3)); //6

这里声明m的时候并没有调用函数f,所以传递进去的参数2会被当作函数的第一个形参y保留起来,再次调用m(3)的时候,3被当作第二个形参z处理。

 

posted @ 2021-02-25 14:33  C元素  阅读(81)  评论(0编辑  收藏  举报