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处理。