闭包的示例以及带来的问题


//返回函数数组,以为内部函数保存着func2函数的活动对象,所以引用的都是同一个变量,因此每个i的值都为10,比如执行func2()[0]()结果为10
function func2() {
	var result = new Array();

	for (var i = 0; i < 10; i++) {
		result[i] = function() {
			return i;
		};
	}
	return result;
}

//返回函数数组,因为num是复制i值,不是引用,所以每个num取值不一比,如执行func4()[0]()结果为0
function func4() {
var result = new Array();

for (var i = 0; i < 10; i++) {
result[i] = function(num) {
return function() {
return num;
}
}(i);
}
return result;
}

//返回[0,1,2,3,4,5,6,7,8,9]
function func1() {
	var result = new Array();

	for (var i = 0; i < 10; i++) {
		result[i] = i;
	}
	return result;
}

//返回[0,1,2,3,4,5,6,7,8,9]
function func3() {
	var result = new Array();

	for (var i = 0; i < 10; i++) {
		result[i] = function() {
			return i;
		}();
	}
	return result;
}
//返回[0,1,2,3,4,5,6,7,8,9]
function func5() {
	var result = new Array();

	for (var i = 0; i < 10; i++) {
		result[i] = function(num) {
			return num;
		}(i);
	}
	return result;
}

  

posted @ 2017-05-05 09:26  echo2016  阅读(281)  评论(0编辑  收藏  举报