apply call bind的区别

apply

  • apply 方法  它接受一个参数数组
  • apply 方法的第一个参数是 this 的值。
  • 第二个参数是一个数组,数组中的元素作为参数传递给函数。

apply 方法调用一个函数,并指定 this 和一个包含参数的数组(或类数组对象)。

     function greet(greeting,arg,aa){

            console.log(greeting)  // hello

            console.log(this)  // {name:'zhangsan'}

            console.log(greeting+','+this.name+arg+aa)  // hello,zhangsan!###

        }

        const person = {name:'zhangsan'}

        greet.apply(person,['hello','!','###'])

call

  • call 方法调用一个函数,允许你传递参数列表给这个函数。
  • call 方法的第一个参数是 this 的值,在函数执行时使用。
  • 其余参数是传递给函数的参数。

call 方法调用一个函数,并指定 this 和一系列参数。

function sayHello() {
  console.log(`Hello, ${this.name}`);
}

const person = { name: "Alice" };
sayHello.call(person); // 输出: Hello, Alice

 function greet(greeting,arg,aa){

            console.log(greeting) // hello

            console.log(this) //{name:'zhangsan'}

            console.log(greeting+','+this.name+','+arg+','+aa) //hello,zhangsan,jon,undefined

        }

        const person = {name:'zhangsan'}

        greet.call(person,'hello','jon')

bind

  • bind 方法创建一个新的函数,当你调用这个新函数时,它的 this 值会被设置为你在 bind 方法中指定的值。
  • bind 方法的第一个参数也是 this 的值。
  • 其余参数是当新函数被调用时,传递给原函数的参数

bind 方法创建一个新的函数,当这个新函数被调用时,this 指向指定的值,并且预先传入一个或多个参数。

  function greet(greeting,arg,aa){

            console.log(greeting) // hello

            console.log(this) //{name:'zhangsan'}

            console.log(greeting+','+this.name+','+arg+','+aa) //hello,zhangsan,&&&,%

        }

        const person = {name:'zhangsan'}

        const newGret = greet.bind(person,'hello','&&&','%')

        newGret('**')

区别总结:

  • 参数传递方式

    • apply: 接受两个参数,第一个是 this 指向,第二个是参数数组。
    • call: 接受多个参数,第一个是 this 指向,后面是逐个传递的参数。
    • bind: 接受多个参数,第一个是 this 指向,后面是逐个传递的参数,但它返回一个新的函数,而不是立即执行。
  • 立即执行与延迟执行

    • applycall 都是立即调用函数。
    • bind 返回一个新的函数,可以在以后调用。
  • 主要用途

    • apply 常用于需要将一个数组作为参数传递给一个函数的场景。
    • call 常用于函数需要直接传递参数的场景。
    • bind 常用于需要创建一个带有特定 this 值的新函数,并在以后某个时刻执行的场景。
    • 使用场景call 和 apply 通常用于立即调用函数并需要动态传递参数的场景,而 bind 用于创建一个预设了 this 值的新函数,可能稍后调用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值