美文网首页
用arguments对象重写递归和闭包

用arguments对象重写递归和闭包

作者: 每日log | 来源:发表于2021-01-05 13:15 被阅读0次

首先,本篇需要【闭包】【arguments】【递归】几个知识点,如果你都很熟悉,请跳过这三个链接。

有关【闭包】的回顾请参照下面链接:

【闭包】:闭包(closure)

有关【arguments对象】的回顾请参考链接:

【arguments】:剩余参数和arguments对象

有关【递归】的回顾请参考链接:

【递归】:带你刷LeetCode中的递归算法

如果你都很熟悉,请跳过链接。

1. arguments对象的属性

今天在写一个闭包函数的时候,突然想到了函数的arguments对象,我们知道arguments是函数的一个属性,只有在函数内部才能被调用。我们再次打印arguments

function fn(){
    console.log(arguments)     
}
fn(1,2)
图片

arguments.length 代表了实参的个数

arguments.callee 是函数本身,也就是说可以用它来调用函数自身。

那么当我们再次写闭包函数的时候,可以用arguments.callee代替函数自身呀

我们以斐波那契函数为例,再次写一个闭包函数求某个斐波那契值。

2. 求斐波那契数列 1、1、2、3、5、8、13、21...

观察规律,从第三项开始,当前项的值是前两项的和,如果当前数字是n,前两项就是n-1和n-2,递归状态:fb(n-1)+fb(n-2);

退出条件是:n为1和2的时候当前项都是1。


function fb(n) {
    if (n === 1 || n === 2) {
        return 1;
    }
    return fb(n - 1) + fb(n - 2);
}
console.log(fb(5)); // 5

用arguments.callee代替fb函数:

function fb(n) {
    if (n === 1 || n === 2) {
        return 1;
    }
    return arguments.callee(n - 1) + arguments.callee(n - 2);
}
console.log(fb(5)); // 5

下次我们在写一个方法调用本身的时候,记得arguments.callee哦。

相关文章

  • 用arguments对象重写递归和闭包

    首先,本篇需要【闭包】【arguments】【递归】几个知识点,如果你都很熟悉,请跳过这三个链接。 有关【闭包】的...

  • JavaScript - 闭包

    理解 关于闭包 答案: 用arguments.callee和闭包实现的函数封装 应用 利用闭包实现自动递增计数

  • 再说arguments对象

    1. arguments对象的属性 今天在写一个闭包函数的时候,突然想到了函数的arguments对象,我们知道a...

  • 递归和闭包

    js变量的作用域:全局作用域(全局变量) : 在函数外面声明的变量**生命周期(变量从声明到销毁): 页面从打开到...

  • JavaScript高级程序设计笔记7

    函数表达式 递归 闭包 (1)闭包与变量 (2)关于this对象 (3)内存泄漏 模仿块级作用域 私有变量 (1)...

  • 函数表达式

    一、函数声明提升 二、递归 三、闭包(详见闭包)

  • 函数对象和闭包

    函数对象和闭包 一) 函数对象 示例: 二)函数嵌套 三)闭包函数

  • 常用但易忘的一些知识点

    递归调用arguments.callee(); caller和callee:arguments.callee返回当...

  • Javascript 闭包和递归

    本篇是关于自己对于JS学习闭包和递归的学习和总结 , 大部分为引用 , 部分案例自己总结 。 1.1 闭包(cl...

  • 闭包/递归

    // 递归

网友评论

      本文标题:用arguments对象重写递归和闭包

      本文链接:https://www.haomeiwen.com/subject/tawioktx.html