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


    一、匿名函数

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

  • 相关阅读:
    奇异值分解
    特征值和特征向量
    矩阵
    矢量化
    符号数组
    通用函数
    数据平滑
    多项式拟合
    协方差/相关矩阵/相关系数
    json
  • 原文地址:https://www.cnblogs.com/daheiylx/p/8810551.html
Copyright © 2020-2023  润新知