一、匿名函数
匿名函数指的是创建一个函数并将它赋值给变量functionName。
1 var sayHi;
2 if(condition) {
3 sayHi = function(){
4 alert("Hi!");
5 }
6 }else {
7 sayHi = function(){
8 alert("Yo!");
9 }
10 }
注意的是,和普通函数不同,匿名函数要先声明才可以调用,以下的代码是错误的。
1 sayHi(); //错误:函数还不存在
2 var sayHi = function(){
3 alert("Hi!");
4 }
二、闭包
闭包是指有权访问另一个函数作用域中的变量的函数。
1 function createComparisonFunction(propertyName){
2 return function(object1 , object2){
3 var value1 = object1[propertyName];
4 var value2 = object2[propertyName];
5 if(value1 <value2) {
6 return -1;
7 }
8 else if(value1 >value2) {
9 return 1;
10 }
11 else {
12 return 0;
13 }
14 }
15 }
闭包中的匿名函数可以访问 createComparisonFunction() 函数的活动对象和全局变量对象,更重要的是 createComparisonFunction() 函数在执行完毕后,其活动也不会被销毁,因为匿名函数的作用域仍然在引用这个活动对象。想要销毁,则执行以下代码:
1 //创建函数
2 var compareNames = createComparisonFunction("name");
3 //调用函数
4 var result = compareNames({ name : "lily" } , { name : "lulu" });
5 //解除对匿名函数的引用(以便释放内存)
6 compareNames = null;
闭包的缺点:过多使用闭包可能会导致内存占用过多。
参考《JavaScript高级程序设计》