function bar() {
console.log(myName)
}
function foo() {
var myName = "极客邦"
bar()
}
var myName = "极客时间"
foo()每个执行上下文的变量环境中,都包含一个外部引用,用来指向外部的执行上下文,即图中的 outer。
词法作用域就是指作用域是由代码中函数声明的位置来决定的,所以词法作用域是静态的作用域,通过它就能够预测代码在执行过程中如何查找标识符。
词法作用域是代码编译阶段就决定好的,和函数是怎么调用的没有关系。
解释一开始的代码执行过程:首先是在 bar 函数的执行上下文中查找,但因为 bar 函数的执行上下文中没有定义 myName 变量,所以根据词法作用域的规则,下一步就在 bar 函数的外部作用域中查找,也就是全局作用域。


