Web前端开发笔记之JS提升06——严格模式、改变this指向

本文详细介绍了JavaScript中箭头函数this的独特行为,并提供了几种改变函数this指向的方法,包括call、apply和bind,以及在实际代码中的应用实例,适合前端开发者理解严格模式下的函数上下文问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

严格模式:

详细见MDN。下面我说几个比较常用的严格情况:

箭头函数的this:

由于箭头函数会指向其调用者的上级,所以一般不在箭头函数中使用this。

那么有没有办法改变this指向呢?

改变this的方法合集:

<button class="btn">获取验证码</button>
<script>
    // console.log(this)
	// let timer=window.setInterval(function (){
    //     console.log(this)
	// 	clearInterval(timer)
	// },1000)
    let arr1=[1,2,3,4,5]
    function print(...args) {
        this.forEach(function (item,index,o) {
            console.log(item)
        })
        console.log(`others: ${args}`)
    }
    //1.call方法,修改函数this指向,其中第一个参数是this指向的元素,剩下的会作为参数传递给函数
    print.call(arr1,11,22,33,44)

    //2.apply方法,修改函数this指向,其中第一个参数是this指向的元素,剩下的必须以数组传递给函数
    let arr2=[11,22,33,44]
    print.apply(arr1,arr2)

    //这里使用到了apply方法
    console.log(Math.max(1,2,3,4,5))//正常情况我们不能传递数组进入
    console.log(Math.max.apply(null,arr2))//这是转变this的方法,因apply必穿数组类型数据
    console.log(Math.max(...arr2))//使用...扩展运算符解开数组

    //3.bind方法,修改函数this指向,其中第一个参数是this指向的元素,剩下的会作为参数传递给函数
    //call和apply都会直接调用函数,而bind方法可以转换this后再使用表达式函数的变量来调用
    let newPrint=print.bind(arr1,3,4,4,3)
    newPrint()
    //如果想直接调用可以使用()直接加在修改后的后面
    print.bind(arr1,5,6,7,{a:1})()

    //下面给出实例
    let getBtn=document.querySelector('.btn')
    getBtn.addEventListener('click',function () {
	    this.disabled=true

	    window.setTimeout(function () {
	        this.disabled=false
        }.bind(this),2000)
    })

</script>

这一部分很重要请详细查看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

言行物恒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值