(面试常见问题1) js中的this指向问题

本文详细探讨了JavaScript中this的指向问题,包括全局作用域、事件处理函数、箭头函数、普通函数、构造函数、方法调用以及自调用函数等场景下的this行为。通过实例解析,帮助读者深入理解JavaScript中this的关键概念。

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

JavaScript 重点 ——this指向问题

1.在全局作用域下,指向window对象

<script>
    console.log(this);  // window
</script>

2.在事件处理函数中,指向事件源的DOM对象

 <button>A</button>
 <script>
     let btn = document.querySelector('button')
     btn.addEventListener('click', function () {
         console.log(this);   // <button>A</button>
     })
</script>

3.箭头函数中,this指向箭头函数所在作用域的this指向

<script>
    console.log(this);      // window
    () => {
        console.log(this);  // window
    } 
</script>

4.普通函数,this指向函数调用者

function fun() {
    console.log(this)  // window
}
fun()      // 函数默认由window调用    
// fun() 相当于 window.fun() 

5.定时器是window对象中的一个函数.因为window调用了定时器,所以,定时器中的this指向window对象

<script>
    window.setTimeout(() => {
        console.log(this);  // window
    }, 1000);
    window.setInterval(() => {
        console.log(this);   // window
    }, 1000);
</script>

6. 1 构造函数中,this指向new 出来的内存空间

6.1.1 用构造函数创建实例对象的基本原理示意图!

在这里插入图片描述

/*
科普:
	new 构造函数()  指的是创建实例化对象
	new 关键字用于创建实例化对象,每使用一次new,就相当于在内存中开辟了一块新的内存空间.此时,构造函数中的this就指向刚刚开辟出来的新内存空间.
	
*/
<script>
    function dog(name, age) {
        this.name = name
        this.age = age
    }
    let erha = new dog('二哈', 5)
    console.log(erha);  // {age: 5 ,name: "二哈" }
    let erha2 = new dog('金毛', 7)
    console.log(erha2);  // {age: 7 ,name: "金毛" }
</script>

6.2 方法中的this指向调用者或者说是指向当前的实例化对象

<script>
    function dog(name, age) {
        this.name = name
        this.age = age
        this.sound = function () {
            console.log(this);       // {age: 5 ,name: "二哈" sound: f()}
            console.log("汪汪汪!");  // 汪汪汪!
        }
    }
    let erha = new dog('二哈', 5)
    erha.sound()   
</script>

7.自调用函数中,this指向window对象

<script>
    /*
    科普:
         自调用函数:即自己调用自己,无需调用,立刻执行.
    */
    
    // 方法一
    (function fun4() {
        console.log(this);  // window
    }());
    
	//方法二
    (function fun5() {
        console.log(this);  // window
    })()
</script>
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值