关于js中this指向的简单理解(一)

对于一下几种情况,我认为网上说的,谁调用就this就指向谁是可以解释的通的;甚至我觉得可以理解为适用于就近原则,意思就是谁最靠近调用这个函数的,那么this就指向谁;

ps:1.this在函数创建(定义)的时候是无法确定的,只有在调用的时候才可以确定;

  2.window是js中全局的变量,在我的理解中是最顶层的对象,在<script>.</script>最外层定义的函数与变量,其实都是在给window对象定义属性;

var a = 55
function fn(){
  var a = 3;
   console.log(this); // this -> window
  console.log(this.a); //55 
  console.log(a); // 3;      
}
fn(); // 此处是调用window调用fn();实际上是window.fn(); 
function fn(){
  var a = 3;
   console.log(this); // this -> window
  console.log(this.a); //undefined 因为this指向window,window对象中,并没有a这个属性,所以打印this.a 为undefined
  console.log(a); // 3;      
}
fn(); // 此处是调用window调用fn();实际上是window.fn(); 
var obj = {
  a: 66,
  fn: funciton(){
     var b = 45;
     console.log(this.a);  // 66调用fn()的是obj,因此this指向的是obj;在obj中存在a这个属性
  }  
}
obj.fn()
var obj = {
    a: 44,
    b: {
       a: 36,
       fn: function() {
         console.log(this.a); // 36 最靠近调用fn() 的是 b这个对象,b对象中的a属性的值是36
       }
    }

};
obj.b.fn();
var obj = {
    a: 44,
    b: {
      // a: 36,
       fn: function() {
         console.log(this.a); // undefined 最靠近调用fn() 的是 b这个对象,b对象中的不存在a这个属性
       }
    }
};
obj.b.fn();
var obj = {
    a: 44,
    b: {
      // a: 36,
       fn: function() {
         console.log(this.a); // undefined 最靠近调用fn() 的是 window这个对象,window对象中的不存在a这个属性
       }
    }
};
var j = obj.b.fn;  // 此处是把 obj.b 中的fn这个属性的值赋值给j这个变量,这个步骤中,实际上并没有执行函数;
j(); //此处执行fn函数,实际上市window.j()

 

posted @ 2021-05-28 16:07  我自浮沉,虚浮自我  阅读(70)  评论(0编辑  收藏  举报