目录

一、作用域和作用域链

二、闭包

三、无意间共享环境[可以通过闭包解决]

代码一

结果一

 代码二

结果二

 代码三

结果三


一、作用域和作用域链

    
    当函数声明的时候,函数会通过内部属性[scope]来记录创建范围

二、闭包


    什么是闭包:闭包是一个函数加上到创建函数的作用域的连接,闭包“关闭”了函数的自由变量。


第一句话(得到的理解):2个函数,2个函数作用域[scope]还要连接上;
第二句话(得到的理解):关闭函数的变量自由:它暂时不会销毁;


三、无意间共享环境[可以通过闭包解决]

代码一

var str = '123';

function fn(){

	var str = '456';

	console.log( str );
}

fn();

结果一

 代码二

function fun(n){

	return function(m){

		n+=m;
		
		return n;

	}	

}

//第一步
var f = fun(5);
//第二步

console.log(  f(1)  );

console.log(  f(1)  );

console.log(  f(1)  );

结果二

 代码三

var lis = document.getElementsByTagName('li');

for(var i=0;i<lis.length;i++){
	

	(function(){

		var idx = i;

		lis[i].onclick = function(){

			console.log(idx);

		}

	})();

	
}

结果三