前端this指向大揭秘

本文深入探讨JavaScript中的this指向,涵盖全局环境、函数上下文、DOM事件和箭头函数的使用,强调箭头函数的this捕获上下文的特性以及在不同场景下的表现。通过对setTimeout和事件处理函数中的this行为分析,揭示this在不同调用方式下的变化规律。
摘要由CSDN通过智能技术生成

前言

this是指当前执行代码的环境对象。在绝大多数情况下,函数的调用方式决定了this的值。this不能在执行期间被赋值,并且在每次函数被调用时this的值也可能会不同。apply和call方法可以把 this 的值从一个环境传到另一个;ES5引入了bind方法来永久地设置函数的this值,而不用考虑函数如何被调用的;ES2015 引入了支持this词法解析的箭头函数。

目录

1、整体概览

this思维导图

1、全局环境

全局环境下,this始终指向全局对象(window),无论是否严格模式;

// 在浏览器中,全局对象为 window 对象:
console.log(this === window); // true

this.a = 37;
console.log(window.a); // 37

2、函数上下文调用

2.1普通函数

普通函数内部的this分两种情况,严格模式和非严格模式。
(1)非严格模式下,this 默认指向全局对象window。

function f1(){
   
  return this;
}
f1() === window; // true

(2)严格模式下,this指向undefined。

function f2(){
   
  "use strict"; // 这里是严格模式
  return this;
}
f2() === undefined; // true

2.2 函数作为对象的方法

(1)当函数作为对象里的方法被调用时,它们的 this 是调用该函数的对象。
(2)多层嵌套的对象,内部方法的this指向离被调用函数最近的对象(window也是对象,其内部对象调用方法的this指向内部对象, 而非window)。

//方式1
var o = {
   
  prop: 37,
  f: function() {
   
    return this.prop;
  }
};
//当 o.f()被调用时,函数内的this将绑定到o对象。
console.log(o.f()); // logs 37

//方式2
var o = {
   prop: 37};
function independent() {
   
  return this.prop;
}
//函数f作为o的成员方法调用
o.f = independent; 
console.log(o.f()); // logs 37

//方式3
//this 的绑定只受最靠近的成员引用的影响
o.b = {
   g: independent, prop: 42};
console.log(o.b.g()); // 42

2.3 原型链中的this

(1)如果该方法存在于一个对象的原型链上,那么this指向的是调用这个方法的对象,就像该方法在对象上一样。

var o = {
   
  f: function() {
    
    return this.a + this.b; 
  }
};
var p = Object.create(o);
p.a = 1;
p.b = 4;

console.log(p.f())
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值