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

浙公网安备 33010602011771号