# JavaScript this

# Key

this不指向函数自身 this不指向函数的词法作用域

# This

This是在运行时绑定的,并不是在编写时绑定的。 当一个函数被调用时,会创建一个活动记录(也被称为执行上下文)。这个记录会包含函数在哪里被调用(调用栈),函数的调用方式,传入的参数信息等。 this就是这个记录的一个属性,会在函数执行的过程中用到。

# 绑定规则

# 1.独立函数调用中的this指向全局window(默认绑定)

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

const a = 2;
foo(); //2  <==其实等价于window.foo()

# 2.隐式绑定

看调用位置是否有上下文对象,或者说是否被某个对象拥有或者包含

const obj = {
  a: 2,
  foo: function() {
    console.log(this.a);  
  }
};

obj.foo(); //2

# 3.显示绑定

使用bind或者apply实现显示的调用

# 4.New 调用

使用new来调用函数时,或者说发生构造函数调用时,会自动的执行下面的操作:

  1. 创建一个(构造一个)全新的对象
  2. 这个新的对象会执行[[Prototype]]连接
  3. 这个新的对象会绑定到函数调用的this
  4. 如果函数没有返回其他对象,那么new表达式中的函数调用会自动返回这个新的对象
function foo(name) {
  this.name = name
}

const bar = new foo('star');
console.log(bar.name);
陕ICP备20004732号-3