日期:2014-05-16  浏览次数:20362 次

javascript的闭包问题
先由一个例子来引出问题
function f(){
	var a;
	var i=0;
	
	 a=(function(i){
	 		return function(){
	 			return i;}
			})(i)
	i=2;
	 
	return a;
	}
	var a=f();
	alert(a());



function f(){
	var a;
	var i=0;
	
	 a=function(){
	 		return i;}
						
	i=1;
	 
	return a;
	}
	var a=f();
	alert(a());


上面列举的两个例子只有一点的不同,导致了结果的迥异。其实例一其实使用了闭包,而例二没有使用。。。最后导致给a赋得值不同,例一赋得是变量i的值,而例二赋得是变量i的指针。。。。古当i值变时,例二的结果变了
1 楼 winter8 2011-04-14  
解释一下
a=(function(i){  
            return function(){  
                return i;}  
            })(i) 

可以写成
function makeShow(x){
     return function(){
           return x;}
  }
a=makeShow(i);