js作用域链
    作用域分为全局作用域函数作用域
    当取值取不到的时候,js会自内而外自下而上的找这个值
    作用域链的名称解析优先级
    1、语言内置;this、arguments等关键字
    2、形参;函数的形参在函数内都是有效的
    3、函数声明;function foo () {}
    4、变量声明;var
    https://www.cnblogs.com/gaosirs/p/10579059.html
    https://segmentfault.com/a/1190000012362182
    https://github.com/mqyqingfeng/Blog/issues/6
    执行上下文
    执行上下文可以说是js代码被解析和执行时所在环境的抽象概念;
    执行上下文分为全局执行上下文和函数执行上下文;

    js引擎并不是一行一行的执行代码,而是一段一段的;
    可执行代码:全局代码、函数代码、eval代码
    js引擎创建执行上下文栈,最先执行全局代码所以先压入一个全局执行上下文,然后执行一段代码将执行上下文压入栈,当函数执行结束后弹出

    https://juejin.im/post/6844903473301946381
    https://segmentfault.com/a/1190000012362182
    https://www.jianshu.com/p/11d3c56cf98c