JavaScript 的This绑定方式导图

本文是对《加深对 JavaScript This 的理解》一文的导图版翻译函数

JS中的this是一个捉摸不透的东西,它很喜欢变化,很诡异。拥抱变化,接收诡异,看清this的真面目,这篇来源于《加深对 JavaScript This 的理解》的导图也许有些帮助post

首先上张滑稽的图

Markdown

理解This的绑定方式,可能要先理解下上下文对象做用域类型

做用域类型

Markdown

上下文对象

上下文对象也叫运行时环境,是一个在代码运行时的概念,推荐下面这篇文章this

参见此连接spa

关于This的绑定4种规则

1. 默认绑定

Markdown

2. 隐式绑定

Markdown

3. 显式绑定

Markdown

4. new绑定

Markdown

此外,在ES6中引入的箭头函数,须要注意:

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.awindow.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

写在后面 last but not least!!!

this的几种绑定规则,归根结底,的套路就是:
关于几种模式的等价变换形式,知乎上面有大神解答,猛戳这对象

最后是全图

Markdown

附上思惟导图的下载连接

去有道云笔记下载blog

相关文章
相关标签/搜索