js递归

今天学习js红宝书递归  记一下笔记加深印象

一般的递归的写法:

function factrial(num) {

  if (num <= 1) {

    return 1

  } else {

    return num * factrial(num - 1)

  }

}

var result = factrial(4)

这种写法如果使用下面的写法就会出现问题

var anotherFactrial=factrial;

factrial = null

anotherFactrial(5)

先把factrial函数赋值给anotherFactrial变量,然后将factrial变量设置为null(个人不太明白为什么这个写,明白的大佬请评论区赐教),然后再调用factrial的时候,factrial已经是null 所以会报错

TypeError: factrial is not a function

这种情况可以使用arguments.callee解决

argument.callee 的作用是指向正在执行的函数的指针,

修改之后的写法

function factrial(num) {

  if (num <= 1) {

    return 1

  } else {

    return num * arguments.callee(num - 1)

  }

}

在严格模式下,不能访问arguments.callee属性 可以通过明明函数表达式来解决问题

(function f(num) {

  if (num <= 1) {

    return 1

  } else {

    return num * f(num - 1)

  }

})

以上代码创建了名为f()的命名函数表达式,然后将它赋值给变量factrial,这样把factrial赋值给anotherFactrial的时候赋值的是表达式 而不是f函数  factrial为置null的时候  f函数依然存在  解决问题

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容