函数表达式

函数表达式JS定义函数方式有两种:一种是函数声明,另一种就是函数表达式函数声明函数声明可以定义命名的函数变量变量声明必须以“function”开头。函数名在自身作用域和父作用域内是可获取的。具有函数声明提升函数表达式将函数定义为表达式语句(通常是变量赋值)的一部分。通过函数表达式定义的函数可

大家好,欢迎来到IT知识分享网。函数表达式"

JS定义函数

  • 方式有两种:一种是函数声明另一种就是函数表达式

函数声明

  • 函数声明可以定义命名的函数变量
  • 变量声明必须以“function”开头。
  • 函数名在自身作用域和父作用域内是可获取的。
  • 具有函数声明提升

函数表达式

  • 将函数定义为表达式语句(通常是变量赋值)的一部分。
  • 通过函数表达式定义的函数可以是命名的,也可以是匿名的。
  • 函数表达式不能以“function”开头。
  • 函数名在作用域外是不可获取的。

 

// 函数声明
    //关于函数声明,它的一个重要特征就是函数声明提升
    fname()
    function fname() {
      // 函数体
      console.log("hi");
    }
    
    // 函数表达式
    // fn();// 出错:  fn is not a function
    var fn = function () {
      console.log("hello");
    }

递归

  • 递归函数是在一个函数通过名字调用自身的情况下构成的
  • arguments.callee 是一个指向正在执行的函数的指针
 /* 
      递归
     */
    //  实现一个经典的递归阶乘函数
    function factorial(num) {
      if (num <= 1) {
        return 1;
      } else {
        // return num * factorial(num - 1);
        // 改进 知道,arguments.callee 是一个指向正在执行的函数的指针
        return num * arguments.callee(num - 1)
      }
    }

    //  如果函数赋予另一个变量,再factorial = null 会出错
    // 改进 知道,arguments.callee 是一个指向正在执行的函数的指针

    var anotherFactorial = factorial;
    factorial = null;
    // console.log(anotherFactorial(4)); //出错! factorial is not a function
    console.log(anotherFactorial(4)); //24
    /* 
        但在严格模式下,不能通过脚本访问arguments.callee,访问这个属性会导致错误
        改进:
    */
    var factorial2 = (function f(num) {
      if (num <= 1) {
        return 1;
      } else {
        return num * f(num - 1);
      }
    });
    console.log(factorial2 instanceof Function);//true
    console.log(typeof(factorial2));//function
    var anotherFactorial2 = factorial2;
    factorial2 = null;
    console.log(anotherFactorial2(4));//24

以上代码创建了一个名为f()的命名函数表达式,然后将它赋值给变量factorial。即便把函数
赋值给了另一个变量,函数的名字f 仍然有效,所以递归调用照样能正确完成。

 

闭包

  • 闭包是指有权访问另一个函数作用域中的变量的函数
  • 创建闭包的常见方式,就是在一个函数内部创建另一个函数

 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/32110.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信