js中call、apply、bind函数的区别

call函数的使用

let name = "张三"; //全局变量
    function fn(a, b, c, d) {
      console.log(a, b, c, d);   //1 2 3 4
      console.log(this.name, "this.name"); //改变了this指向,指向了pointObj  //王二
    }
    let pointObj = { name: "王二" };
    fn.call(pointObj, 1, 2, 3, 4);

call函数可以接受多个参数,第一个参数:使函数内部this指向这个参数,第二、三...后面的是传递的参数,可以在fn函数中可以接收。

apply函数的使用

  let name = "张三"; //全局变量
    function fn(a, b, c, d) {
      console.log(a, b, c, d);  // 1 2 3 4
      console.log(this.name, "this.name"); //改变了this指向,指向了pointObj  /王二
    }
    let pointObj = { name: "王二" };
    fn.apply(pointObj, [1, 2, 3,4]);

apply函数可以接受两个参数,第一个参数:使函数内部this指向这个参数,第二个参数是一个数组,在fn函数中可以接收到数组中传递的参数

bind函数的使用

 let name = "张三"; //全局变量
    function fn(a, b, c, d) {
      console.log(a, b, c, d); // [1, 2], { x: "x1" },'hello','world'
      console.log(this.name, "this.name"); //改变了this指向,指向了pointObj  /王二
    }
    let pointObj = { name: "王二" };
    fn.bind(pointObj, [1, 2], { x: "x1" }, "hello", "world")();

  bind函数可以接受多个参数,第一个参数作用:使函数内部this指向这个参数,第二、三...后面的是传递的参数,可以在fn函数中接收。需要注意:不会立即执行

总结:call、apply、 bind的区别

相同点:都可以改变函数中this的指向

不同点:

1.call、apply函数调用会立即执行,而bind函数不会立即执行。

2.call、bind可以接收多个参数,而apply接收两个参数,第二个参数是数组,需要把传递的参数放入数组中,调用的函数才能接收到,如果传递第三个参数,也不会报错,但是在函数中拿不到

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值