深入理解javascript原型和闭包(14)——从【自由变量】到【作用域链】 - youngperson/study-100 GitHub Wiki

var x=10;

function fn() {
   var b=20;
   console.log(x+b);	 //这里的x在这里就是一个自由变量
}

var x=10;
function fn() {
   console.log(x);
}

function show(f) {
	var x=20;

	(function (){
		f();        //10,而不是20
	})();
}

show(fn);

要到创建这个函数的那个作用域中取值——是“创建”,而不是“调用”,切记切记。 如果跨了一步,还没找到呢?——接着跨!——一直跨到全局作用域为止。要是在全局作用域中都没有找到,那就是真的没有了。 这个一步一步“跨”的路线,我们称之为——作用域链。