SOURCE

console 命令行工具 X clear

                    
>
console
// 右图和此例不符,只是示意

var a = 1;
function fn(){
   var a = 2;
   return function() {
   	console.log(a)
   };
};
console.log(fn()());
// 词法环境解释:描述环境的对象,主要包含两个部分: 
//  -环境记录:记录相应环境中的形参,函数声明,变量声明等
//  -对外部环境的引用(out reference)

// 分析:函数在执行之前会进行fn环境的环境初始化
// 内部的这个闭包函数的[[scope]]属性会指向fn()函数声明所在的fn environment
// 所以,调用的时候内部没有a这个变量,会找[[scope]]指向的环境(fn)的a


// 同理,foo的[[scope]]是指向全局global的
var b = 1;
function foo() {
	console.log(b)
};
function bar(){
	var b = 2;
	foo();
};
console.log(bar());
<img width="500" src="https://img-blog.csdn.net/20170429090248178?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGhhc3Nh/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">