本文是对《加深对 JavaScript This 的理解》一文的导图版翻译函数
JS中的this是一个捉摸不透的东西,它很喜欢变化,很诡异。拥抱变化,接收诡异,看清this的真面目,这篇来源于《加深对 JavaScript This 的理解》的导图也许有些帮助post
上下文对象也叫运行时环境,是一个在代码运行时的概念,推荐下面这篇文章this
参见此连接spa
var a = 'scope'; function ClassA(){ this.a = 'ClassA'; this.do = function(){ setTimeout(function(){ console.log(this.a); // 期待的是输出 'ClassA' }); } } var ins = new ClassA(); ins.do(); // 然而倒是 : 'scope'
上述代码的运行结果缘由在于,setTimeout
里面的回调函数执行时,属于默认绑定规则,所以在非严格模式下,this
指向window
,this.a
也即window.a
,window.a
就是全局变量var a = 'scope'
.net
箭头函数的出现,打破了这种规则:翻译
var a = 'scope'; function ClassA(){ this.a = 'ClassA'; this.do = function(){ setTimeout(() => { console.log(this.a); // 期待的是输出 'ClassA' }); } } var ins = new ClassA(); ins.do(); // 输出确实是 : 'ClassA'
用function
生成的函数会定义一个本身的this
,而箭头函数没有本身的this
,而是会和上一层的做用域共享this
。箭头函数让this
从新回到静态做用域规则的怀抱。code
this
的几种绑定规则,归根结底,的套路就是:
关于几种模式的等价变换形式,知乎上面有大神解答,猛戳这对象
去有道云笔记下载blog