JavaScript中this指向详解:规则、嵌套与解决方案

作者:函数茶馆

时间:2026-10-30

浏览:283

本文详细解析JavaScript中this的指向规则。首先明确this指向调用函数的对象;其次探讨函数嵌套时内部函数this指向window的特性;最后提供两种解决嵌套函数中this丢失的方法:通过参数传递this或保存this到变量。

文章目录

this指向的基本规则

JavaScript中的this指向一直是开发者容易困惑的难点。经过大量资料查阅与实战演练,许多看似复杂的问题其实有清晰的逻辑。为了帮助大家轻松理解,本文将分几种常见情况对this的指向进行梳理。 关于this的指向,核心规则是:this指向调用当前方法(函数)的那个对象。换句话说,函数在哪个对象下被调用,this就代表那个对象。 下面通过两个示例进行说明:


 oBtn.onclick = function(){ 
    alert(this);  //oBtn
 }

 

 oBtn[i].onclick = fn1;

  function fn1(){ 

  alert(this); //oBtn
 } 

函数嵌套中的this指向

从示例中可以明显看出,函数是在按钮对象被点击时触发的,因此this指向obtn。这两种写法虽然不同,但本质是等价的。 2. 当函数内部嵌套另一个函数时,嵌套的那个内部函数中的this通常指向window。这是JavaScript语言的一个固有特性,无需过度深究其底层原因。 具体示例如下:


oBtn.onclick = function(){

   alert(this); //oBtn(记得这里还是oBtn)

   fn1(); 
  }

 function fn1(){ 
  alert(this); // window
  } 

解决嵌套函数中this丢失的方法

3. 针对上述嵌套情况,如果我们需要让内部函数fn1中的this指向按钮对象,该如何处理?这里提供两种常用方法: 1) 将this作为参数传递给内部函数。 2) 将this保存到一个外部变量中,供内部函数使用。 具体示例如下:


oBtn.onclick = function(){

   alert(this); //oBtn

   fn1(this); 1 将上面的this作为参数传函数去
  }

 function fn1(obj){ 
  alert(obj); // oBtn
 }


var that = null;
oBtn[i].onclick = function(){

  alert(this); //oBtn
  that = this ;// 将上面的this保存起来赋给另一个变量
  fn1();
}

function fn1(){ 
  alert(that); // 指向oBtn
} 

综上所述,this指向的基础情况主要包含上述几种,许多复杂场景也是由这些基础规则演变而来。希望读者能够轻松掌握这一核心概念。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章