JavaScript 函数的call apply bind 方法学习

在JS中每个函数都包含两个非继承而来的方法

  • call()
  • apply()
    这两个函数作用都是:
    在特定的作用域中调用函数,等于设置函数体内this对象的值,
    以扩充函数赖以运行的作用域

    区别:
    1.call()接收多个参数 call(this, 参数1, 参数2, …)
    传递的每个参数需要挨个列举出来
    2.apply()接收两个参数 apply(this, [参数1, 参数2, …])
    第一个与call相同接收this
    第二个参数可以为一个参数数组也可以是arguments对象

call()和apply() 的作用完全相同 区别仅在于接受的参数不同
eg:call() apply()

      window.name = 'window'
      var a = {
        name: 'a'
      }
      function showEnvoriment() {
        console.log(this.name)
      }
      showEnvoriment.call() //	{1}
      showEnvoriment.apply() 	
      showEnvoriment.call(window) 
      showEnvoriment.apply(window) 
      showEnvoriment.call(a) //	{2}
      showEnvoriment.apply(a) 
      showEnvoriment.call(this) // {3}
      showEnvoriment.apply(this) 

{1}若call()没有指定this方向 则默认为window
{3}call() 作用域变为a this指向a
{4}与{1}一样 参数为this或为空都默认为window

apply()查找最大值的使用:

      var num = [1, 2, 3, 4, 22, 51, 23, 12, 512, 534, 9, 6]
      console.log(Math.max.apply(null, num))//534

使用call与apply的好处:

扩充作用域让对象不需要与方法有耦合关系

bind()方法:绑定函数

      window.name = 'window'
      var a = {
        name: 'a'
      }
      function showEnvoriment() {
        console.log(this.name)
      }
      var objshowEnvoriment = showEnvoriment.bind(a)
      objshowEnvoriment()//	a

showEnvoriment()调用bind()并传入对象a, 创建了objshowEnvoriment()函数
因此即使在全局作用域中调用这个函数依然会是a

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值