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="">