zoukankan      html  css  js  c++  java
  • 函数表达式

    函数表达式

    函数表达式的特征
      声明方式:
        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任然有效。 这种在严格与非严格模式都是能通过的。

  • 相关阅读:
    IOS 网络编程 + 后台保持连接
    iOS 通过代码关闭应用程序
    iOS 委托和协议区别和联系
    对于WIFI版ipad(无GPS芯片)定位功能的释疑
    iOS单例
    svn不能添加.a文件的解决方法
    mac下SVN上传.a静态库文件
    iOS7 兼容及部分细节
    app被Rejected 的各种原因翻译
    iOS 沙盒购买,弹出“需要验证”,“继续登录”的问题?
  • 原文地址:https://www.cnblogs.com/czhyuwj/p/5617056.html
Copyright © 2011-2022 走看看