JS 中 this 几种基本情况

本文深入探讨了JavaScript中this的几种基本使用情况,包括事件绑定、普通函数执行、匿名函数执行、特殊处理(如forEach的回调函数)以及括号表达式中的this指向。总结了在不同上下文中this的值,强调了全局上下文、块级上下文以及函数执行主体对this的影响。
摘要由CSDN通过智能技术生成

JS 中 this 几种基本情况

  • this -> 函数的执行主体

    • 函数执行主体:谁把函数执行
    • 函数执行上下文:在哪执行的
  • 函数执行主体规律:

    1. 事件绑定:给当前元素的某个事件行为绑定方法,当事件触发,方法执行,方法中的 this 是当前元素本身
    2. 普通函数执行
      • 函数执行前面是否有"点",没有点,this => window(严格模式下是 undefined)
      function fn(){
        console.log(this);
      }
      fn(); // => window/undefined
      
      • 有"点","点"前面是谁 this 就是谁
      let obj = {
        name: 'patrick',
        fn(){
          console.log(this);
        }
      };
      obj.fn(); // => obj
      
      • 匿名函数(自执行函数/回调函数)如果没有特殊处理,this => window(严格模式下是 undefined)
      (function(){
        console.log(this); // => window/undefined
      })()
      
      function fn1(callback){
        callback();
      }
      let obj = {
        name: 'patrick',
        fn2(){
          console.log(this);
        }
      };
      fn1(obj.fn2);// => window/undefined
      
      • 特殊处理
      let obj = {
        name: patrick
      };
      let ary = [1, 2, 3, 4, 5];
      ary.forEach(function(item){
        console.log(this) // => obj
      }, obj)
      //触发回调函数的时候,forEach 内部会把回调函数中的 this 改变为传递的第二个参数(obj)
      
      • 括号表达式情况
      let obj = {
        fn(){
          console.log(this);
        }
      }
      obj.fn(); // => obj
      //括号表达式中只有一项,和不加没本质区别
      (obj.fn())(); // => obj
      //括号表达式有多项时,只取最后一项。
      //括号表达式相当于整体执行,相当于前面没有"点",所以下方输出为 window
      (10, obj.fn())() // =>window/undefined
      
  • 全局上下文中的 this 是 window

  • 块级上下文中没有自己的 this,所用到的 this 都是所处上级上下文中的 this

{
  let n = 12;
  console.log(this); // => window
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值