JavaScript高级程序设计: 函数表达式

闭包

闭包是指有权访问另一个函数函数作用域中的变量(内部变量)的函数.

function createComparsionFunction( propertyName ){

	return function( object1 , object2 ){

		var value1 = object1[ propertyName ];
		var value2 = object2[ propertyName ];

		if( value1 < value2 ){

			return -1;
		}
		else if( value > value2 ){

			return 1;
		}
		else{

			return 0;
		}
	};
}

var compare = createComparsionFunction('age');
compare(  {age: 15} , {age: 17} );	// -1

闭包与变量

闭包只能取得包含函数中任何变量的最后一个值,闭包包含的是整个变量对象,而不是某个特殊变量。

function createComparsionFunction(){

	var results = new Array();

	for( var i=0; i<10; i++ ){

		results[i] = function(){

			return i;
		}
	}

	return results;
}

results = createComparsionFunction();
results[0](); //10
results[1](); //10

但是,我们可以通过创建另一个匿名函数强制让闭包的行为符合预期。 这里的匿名函数有一个参数num,由于参数是按值传递,所以就会将变量i的值复制给num, 而匿名函数内部定义的闭包正好取到num值并返回。

function createComparsionFunction(){

	var results = new Array();

	for( var i=0; i<10; i++ ){

		results[i] = function(num){

			return function(){

				return num;
			}
		}(i);
	}

	return results;
}

results = createComparsionFunction();

模块模式

var singleton = function(){

	var privateVar = 10;

	// 私有变量和私有函数
	function privateFunc(){

		return false;
	}

	// 特权/公有方法和属性
	return {

		publicProperty: true,

		publicMethod: function(){

			privateVar = privateVar + 1;
			return privateVar;
		}
	};
};

var1 = singleton();
var1.publicMethod(); // 11
posted @ 2015-02-08 12:15  saintyk  阅读(209)  评论(0编辑  收藏  举报