函数表达式——匿名函数和闭包

一、匿名函数

  匿名函数指的是创建一个函数并将它赋值给变量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高级程序设计》

原文地址:https://www.cnblogs.com/daheiylx/p/8810551.html