• 函数表达式


    函数表达式

    函数表达式的特征
      声明方式:
        1> 函数声明
        2> 函数表达式

    函数声明如下:

    1 function functionNmae(){
    2     return "ERRO";
    3 }


    表达式声明

    1 var functionNmae = function(){
    2     return "ERRO";
    3 }


    第一种方式:关于函数声明主要是:函数声明提升,意思是在执行代码之前会先读取函数声明。这就意味着可以把函数声明放在调用它的后面。

    1 functionNmae()  //正确
    2 function functionNmae(){
    3     return "ERRO";
    4 }
    5 functionNmae.name // functionNmae



    第二种方式:表达式声明,在这种情况下创建函数叫做匿名函数,因为function关键字后面没有标识符。匿名函数的name属性是空字符串。

    functionNmae();  //erro
    var functionNmae = function(){
        return "ERRO";
    } 


    使用函数实现递归

    递归函数是在一个函数通过名字调自身情况下构成的,如下所示

    1 function factorial(num){
    2   if(num<=1)
    3     return 1;
    4   else
    5     return num * factorial(num-1);
    6 }

    这是一个经典的递归阶乘函数。虽然这个函数表面没有什么问题,但是下面的代码可能导致出错。

    1 var anotherFactorial = factorial;
    2 factorial = null;
    3 alert(anotherFactorial(4)); //出错

    这个因为在执行时,factorial已经不是函数了,所以会导致报错。在这种情况下我们可以使用arguments.callee 可以解决这个问题。

    我们知道,arguments.callee 是一个指向正在执行的函数的指针,因此可以用它来实现对函数的递归调用,例如

    1 function factorial(num){
    2   if(num<=1)
    3     return 1;
    4   else
    5     return num * arguments.callee(num-1);
    6 }


    通过使用arguments.callee 代替函数名,可以确保无论怎么调用函数都不会出问题。

    注意:严格模式下不能通过脚本访问 arguments.callee 访问这个属性会导致报错。不过可以使用命名函数表达式来达成相同的结果。例如

    var factorial = (function f(num){
      if(num<=1)
        return 1;
      else
      return num * arguments.callee(num-1);
    });


    以上代码创建一个名为 f()的命名函数表达式,然后将它赋值给变量 factorial. 即便把函数赋值给另一个变量,函数的名字f任然有效。 这种在严格与非严格模式都是能通过的。

  • 相关阅读:
    公司财务(书籍学习过程总结)
    职场心理学-心理学第一天(非原创)
    (原创干货)自身管理-日常思考实战框架学习第八天
    (原创干货)融资、路演-日常思考实战框架学习第七天
    (原创干货)理财、投资-日常思考实战框架学习第七天
    (原创干货)理财、投资-日常思考实战框架学习第六天
    (原创干货)公司金融-日常思考实战框架学习第五天
    (原创干货)沟通、演讲-日常思考实战框架学习第四天
    虚拟机中给linux 系统添加硬盘以后,进行分区挂载
    基于Xshell使用密钥方式连接远程主机
  • 原文地址:https://www.cnblogs.com/czhyuwj/p/5617056.html
Copyright © 2020-2023  润新知