【小白鲨笔记】js面试题(十)

18 篇文章 0 订阅

十、call 对比 apply 对比 bind

  • 共同:功能一致

    • 可改变(函数体内的)this指向

    • 语法:函数.call()、函数.apply()、函数.bind()

  • 区别:

    • 执行时机:

      • call、apply:立即执行

      • bind:延迟执行,返回函数

    • 参数:

      • call、bind:普通传参(可有多个参数)

      • apply:数组传参

var str = 'string'
var obj = {str: 'obj.string'}
function fn(name, age){
    this.name = name
    this.age = age
    console.log(this, this.str)
}
fn() // this = window, this.str = string
fn.call(obj,'call',55) // 立即执行 + 参数
fn.apply(obj,['apply',11]) // 立即执行 + 数组形式的参数
fn.bind(obj,'bind',88) // 不会立即执行,返回的是函数 + 参数
fn.bind(obj,'bind',88)() // 该bind会立即执行,执行的是返回函数

使用场景

  1. apply使用情况:当需要数组传参时

    var arr = [1,2,4,5,3,65]
    console.log(Math.max(arr)) //NaN
    console.log(Math.max.apply(null,arr)) //apply才能接受数组
    
  2. call使用情况:可正常传参,并需要正常执行的情况

  3. bind使用情况:当需要函数赋值时

    var btn = document.getElementById('btn')
    var h1 = document.getElementById('h11')
    // 下面使用bind不需要执行bind返回的函数:DOM点击事件需要的就是函数
    btn.onclick = function(){
        console.log(this) //无bind情况this = button元素
    }.bind(h1) // 将this指向从button元素改为h1元素
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值