zoukankan      html  css  js  c++  java
  • JavaScript学习笔记(八)--- 函数表达式

    1.递归

    实现一:

    function factorial(num){
        if(num<=1){
            return 1;
        }else{
            return num*factorial(num-1);
        }
    }
    alert(factorial(4)); //24

    但给factorial重赋值时,再调用就会出错。

    var anotherFactorial = factorial;
    factorial = null;
    alert(anotherFactorial(4)); //TypeError: factorial is not a function

    实现二:

    使用arguments.callee解决上面问题。

    function factorial(num){
        if(num<=1){
            return 1;
        }else{
            return num*arguments.callee(num-1);
        }
    }
    alert(factorial(4)); //24

    修改factorial,再调用

    var anotherFactorial = factorial;
    factorial = null;
    alert(anotherFactorial(4)); //24

    实现三:

    在严格模式下,不能通过脚本访问arguments.callee。解决办法,使用命名函数表达式。

    var factorial = (function f(num){
        if(num<=1){
            return 1;
        }else{
            return num*f(num-1);
        }    
    });
    
    alert(factorial(4)); //24

    以上代码创建了一个名为f()的命名函数表达式,然后将它赋值给变量factorial。

    把函数赋值给另一个变量,函数的名字f仍然有效。这种方式在严格模式和非严格模式下都行得通。

    var anotherFactorial = factorial;
    factorial = null;
    alert(anotherFactorial(4)); //24

    2.闭包

  • 相关阅读:
    操作系统的发展史
    多线程的些许理解(平台x86,具体考虑linux,windows)
    C++ 11 智能指针
    C++虚函数和纯虚函数
    Qt之excel 操作使用说明
    查找之二叉排序树
    图的一些总结
    树的一些总结
    直接插入排序
    冒泡和选择排序
  • 原文地址:https://www.cnblogs.com/yanyangbyou/p/3961276.html
Copyright © 2011-2022 走看看