JavaScript中的this关键字如何理解?

本文详细解析了JavaScript中this关键字的工作原理及其使用场景。探讨了this如何在不同上下文中获得不同的值,尤其是在函数嵌套和非严格模式下的行为差异。

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

  1. this是一个关键字,不是变量,也不是属性名,在JavaScript中不允许给this赋值。
  2. 关键字this没有作用域的限制,嵌套的函数不会从调用它的函数中继承this。

实例1:

var o={
    m:function(){
        var self=this;
        console.log(this===o); //true
        f(); //调用嵌套函数
        
        //嵌套的函数不会从调用它的函数中继承this
        function f() {
            console.log(this===o);//false ,this的值是全局对象或者undefined
            console.log(self===o);//ture
        }
    }
}
  1. 如果嵌套的函数作为方法调用,其this的值指向调用它的对象;如果嵌套的函数作为函数调用,其this值是全局变量(非严格模式下)或者是undefined(严格模式下)。一定不能误以为调用嵌套函数时this会指向调用外层函数的上下文,如果想访问外层函数的this,可以将该this值保存在一个变量中。————《JavaScript权威指南》
  2. this在《javascript高级程序设计》一书给出的解释是:
    this对象是在运行时基于函数的执行环境绑定的:在全局函数中,this等于window,而当函数被作为某个对象调用时,this等于那个对象。不过,匿名函数具有全局性,因此this对象通常指向window。

实例2:

var name = "The Window";
var object = {
   name : "My Object",
   getNameFunc : function(){  //这个函数是作为对象的方法调用
      return function(){
        return this.name;
     };
   }
};
alert(object.getNameFunc()());//result:The Window
小结
  • 在全局环境中调用一个函数,函数中的this对象指向的是全局变量window(非严格模式下)
  • 通过一个对象来调用其内部的方法,该方法内的this指向的是调用它的对象。但是如果该方法内还定义了其他函数,则这些函数的this指向还是全局变量window(非严格模式下)
  • 关键字this没有作用域的限制,嵌套的函数不会从调用它的函数中继承this
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值