this的思考

问题:JS中为什么要用this?

回答:因为this采用隐式“传递”一个对象的引用,所以可以将API设计得更加简洁和可复用

 

问题:JS中的this是什么?

背景:this是在运行时绑定的,this的上下文取决于函数调用的各种条件,又取决于函数的调用方式

本质:当一个函数被调用时,会创建一个活动记录(也称为执行上下文)。

这个活动记录会包含有这个函数在哪里被调用(调用栈)、这个函数的调用方式、传入的参数等信息。

this就是这个活动记录的一个属性,会在这个函数执行的过程中用到。

 

问题:JS中如何判断一个运行中函数的this绑定?
前提:首先我们要找到这个函数的直接调用位置

分析:

  • 情况:由new调用?

    判断:绑定到新创建的对象
  • 情况:由call或者apply(或者bind)调用?

    判断:绑定到指定的对象
  • 情况:由上下文对象调用?

    判断:绑定到上下文对象

  • 情况:默认情况?

    判断:绑定到全局对象
  • 情况:严格模式下的默认情况?

    判断:绑定到undefined
  • 情况:ES6中的箭头函数

    判断:根据当前的词法作用域来决定this

posted @ 2018-03-26 10:22  wuyongyu  阅读(87)  评论(0编辑  收藏  举报