zoukankan      html  css  js  c++  java
  • Javascrip之匿名函数

    前面讲过,定义函数的方式有两种:一种是函数声明,另一种是函数表达式。
    函数声明: 
    1
    2
    3
    function functionName(arg0,arg1,arg2){
          //函数体
    }
    关于函数声明,一个重要的特征就是函数声明提升,意思就是在执行代码之前会先读取函数声明。这就意味着可以把函数声明放到调用它的语句之后。
    函数表达式:
    1
    2
    3
    var functionName=function(arg0,arg1,arg2){
          //函数体
    }   //最常用的形式
    函数表达式会先创建一个匿名函数,在将这个匿名函数赋值给某一变量。

    能够创建匿名函数在赋值给变量,也能把匿名函数作为其他函数的返回值返回。

    1.递归

    递归函数是在一个函数通过名字调用自身的情况下构成的。

    下面是一个经典的递归阶乘的函数。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function factorial(num){ 
        if(num<=1){ 
            return 1; 
            }else{           
            return num*factorial(num-1);             
            
        
        
    var anotherFactorial=factorial; 
    factorial=null
    alert(anotherFactorial(4));

    这个是错误的。

    我们可以用arguments.callee解决这个问题,arguments.callee是一个指向正在执行的函数的指针,因此可以用它来实现对函数的递归第调用。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function factorial(num){  
        if(num<=1){  
            return 1;  
            }else{            
            return num*arguments.callee(num-1);              
            }  
        }  
          
    var anotherFactorial=factorial;  
    factorial=null;  
    alert(anotherFactorial(4));

    但是在严格模式下,脚本是不能访问arguments.callee的。我们可以使用函数表达式来达成相同的结过。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    var factorial=(function f(num){
        if(num <=1 ){
            return 1
            }else{
            return num * f(num-1);
        }
    });
      
    var anotherFactorial=factorial;
    factorial=null;
    alert(anotherFactorial(4));




  • 相关阅读:
    BestCoder 1st Anniversary ($) 1002.Hidden String
    Oracle 复制随意表一行的SQL语句(測试Ok)
    华为招聘机试整理15:约瑟夫环
    302跳转
    CCNP路由实验之十 组播(多播)
    How to test Heat (by quqi99)
    用关联容器实现文本替换单词
    【C语言】04-函数
    WAS集群系列(5):集群搭建:步骤3:安装IHS软件
    [Apple开发者帐户帮助]七、注册设备(2)注册多个设备
  • 原文地址:https://www.cnblogs.com/zxj159/p/3095485.html
Copyright © 2011-2022 走看看