js中的this

javascript中的this

javascript中的this与java中的this有点不同。
ECMAScript规范中这样写:

  • this 关键字执行为当前执行环境的 ThisBinding。

MDN上这样写:

  • 在绝大多数情况下,函数的调用方式决定了this的值。

可以这样理解,在JavaScript中,this的指向是调用时决定的,而不是创建时决定的,这就会导致this的指向会让人迷惑,简单来说,this具有运行期绑定的特性。

一般情况下,谁调用,this就指向谁

执行上下文生命周期分为三阶段,创建、执行、回收上下文。

  • 执行上下文的创建阶段,会分别生成变量对象,建立作用域链,确定this指向
  • 执行上下文的执行阶段,会分别变量赋值,函数引用,执行其他代码

首先要明确一个非常重要的结论:this的指向是在函数被调用的时候确定的,也就是执行上下文创建时

  var a = 10;
  var obj = {
      a: 20
  }

  function fn() {
      console.log(this.a);
  }

  fn(); // 10
  fn.call(obj); // 20 call改变this指向到obj

全局this

有一个很好玩的情况:

    var a = 10
    function prin() {
        var a = 30;
        console.log(this.a) 
    }
    prin() // 10 windows调用的函数,所以this指向windows a = 10
    console.log(a) // 10
    var a = 10
    function prin() {
        a = 30;
        console.log(this.a) 
    }
    prin() // 30
    console.log(a) // 30

你可能感兴趣的:(js中的this)