广告
返回顶部
首页 > 资讯 > 精选 >JavaScript中arguments.callee属性有哪些作用
  • 212
分享到

JavaScript中arguments.callee属性有哪些作用

2023-07-02 12:07:13 212人浏览 独家记忆
摘要

这篇文章主要讲解了“javascript中arguments.callee属性有哪些作用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript中arguments.callee属

这篇文章主要讲解了“javascript中arguments.callee属性有哪些作用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript中arguments.callee属性有哪些作用”吧!

arguments.callee的作用

在函数内部,有两个特殊的对象:arguments 和 this。其中, arguments 的主要用途是保存函数参数, 但这个对象还有一个名叫 callee 的属性,该属性是一个指针,指向拥有这个 arguments 对象的函数。 请看下面这个非常经典的阶乘函数

function factorial(num){      if (num <=1) {              return 1;       } else {           return num * factorial(num-1)       }}

定义阶乘函数一般都要用到递归算法;如上面的代码所示,在函数有名字,而且名字以后也不会变 的情况下,这样定义没有问题。但问题是这个函数的执行与函数名 factorial 紧紧耦合在了一起。为 了消除这种紧密耦合的现象,可以像下面这样使用 arguments.callee

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

在这个重写后的 factorial()函数的函数体内,没有再引用函数名 factorial。这样,无论引用 函数时使用的是什么名字,都可以保证正常完成递归调用。例如

function factorial(num){          if(num <= 1){              return 1;          }else{              return num * arguments.callee(num-1);          }      }      var trueFactorial = factorial;      alert(trueFactorial(5));    //120           factorial = function() {          return 0;      }                     alert(trueFactorial(5));// 120 如果没有使用arguments.callee,将返回0

在此,变量 trueFactorial 获得了 factorial 的值,实际上是在另一个位置上保存了一个函数 的指针。然后,我们又将一个简单地返回 0的函数赋值给 factorial 变量。如果像原来的 factorial() 那样不使用 arguments.callee,调用 trueFactorial()就会返回 0。可是,在解除了函数体内的代 码与函数名的耦合状态之后,trueFactorial()仍然能够正常地计算阶乘;至于 factorial(),它现 在只是一个返回 0的函数。

arguments.callee的替换方案

现在已经不推荐使用arguments.callee();

原因:访问 arguments 是个很昂贵的操作,因为它是个很大的对象,每次递归调用时都需要重新创建。影响现代浏览器的性能,还会影响闭包。

不能用怎么办?

像第三段中的例子,重写 factorial()方法导致trueFactorial()结果不在预期。是为了演示而做的。平时写代码应该避免。

递归时用到arguments.callee()是常见的事情,比如

一道面试题。接受参数n=5,不用for循环输出数组【1,2,3,4,5】

这用递归的思路,配合arguments.callee,代码如下

function show(n) {    var arr = [];    return (function () {        arr.unshift(n);        n--;        if (n != 0) {            arguments.callee();        }        return arr;    })()}show(5)//[1,2,3,4,5]

现在arguments.callee 被弃用了。怎么办,其实很简单,给内部函数一个名字即可

function show(n) {    var arr = [];    return (function fn() {        arr.unshift(n);        n--;        if (n != 0) {            fn();        }        return arr;     })()}show(5)//[1,2,3,4,5]

斐波那契递归算法替换

function factorial(num) {      if (num <= 1) {        return 1      }      var fac = 1      return (function fn() {        fac *= num        num--        if (num != 0) {          fn()        }        return fac      })()    }    factorial(5) // 120

感谢各位的阅读,以上就是“JavaScript中arguments.callee属性有哪些作用”的内容了,经过本文的学习后,相信大家对JavaScript中arguments.callee属性有哪些作用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: JavaScript中arguments.callee属性有哪些作用

本文链接: https://www.lsjlt.com/news/341879.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JavaScript中arguments.callee属性有哪些作用
    这篇文章主要讲解了“JavaScript中arguments.callee属性有哪些作用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript中arguments.callee属...
    99+
    2023-07-02
  • JavaScript中arguments.callee属性的作用与替换方案
    arguments.callee的作用 在函数内部,有两个特殊的对象:arguments 和 this。其中, arguments 的主要用途是保存函数...
    99+
    2022-11-13
  • JavaScript有哪些常用属性
    JavaScript是一种广泛使用的编程语言,主要用于网页开发和应用程序开发。它具有很多强大的属性,可以帮助开发人员编写更加灵活、高效和功能丰富的应用程序。在本文中,我们将探讨JavaScript中一些常用的属性。length属性lengt...
    99+
    2023-05-14
  • javascript中的事件属性有哪些
    这篇文章将为大家详细讲解有关javascript中的事件属性有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。java基本数据类型有哪些Java的基本数据类型分为:1、整数类型,用来表示整数的数据类型。...
    99+
    2023-06-14
  • javascript对象属性有哪些
    javascript中的对象属性有:1.constructor,返回对创建此对象的数组函数的引用;2.isPrototypeOf,检查传入对象是否是当前对象的原型;3.valueOf,返回对象的字符串、数值或布尔值表示;javascript...
    99+
    2022-10-12
  • JavaScript中dom节点有哪些常用属性
    今天就跟大家聊聊有关JavaScript中dom节点有哪些常用属性,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。JavaScript有什么特点1、js属于一种解释性脚本语言;2、在绝...
    99+
    2023-06-14
  • JavaScript中有哪些常用的属性方法
    JavaScript中有哪些常用的属性方法?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。JavaScript常用属性方法有:document.write(&qu...
    99+
    2023-06-14
  • android gravity属性有哪些作用
    Android中的gravity属性用于指定View中内容的对齐方式。以下是常用的gravity属性值及其作用:- left:将内容...
    99+
    2023-10-18
    android
  • CSS filter属性的作用有哪些
    CSS filter属性用于对元素进行图像处理,可以改变图像的颜色、亮度、对比度、饱和度等。具体的作用包括:1. blur:模糊图像...
    99+
    2023-09-05
    CSS
  • Android应用中SearchView属性的作用有哪些
    这期内容当中小编将会给大家带来有关Android应用中SearchView属性的作用有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。SearchView是搜索框组件,它可以让用户在文本框里输入文字,通...
    99+
    2023-05-31
    android searchview
  • Vue export default中的name属性有哪些作用
    目录Vue export default的name属性作用1.组件自身的递归调用2.当我们使用vue.js官方提供的调试工具调试3.最后一种应该是使用比较多的情况Vue如何获取组件n...
    99+
    2022-11-13
  • jQuery的操作属性有哪些
    这篇文章主要介绍jQuery的操作属性有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、操作属性1、读取属性值:attr(属性名)取得以第一匹配元素的属性值。通过这个方法可以方便地从第一个匹配元素中获取一个属性...
    99+
    2023-06-29
  • JavaScript属性节点有哪些类型
    本篇内容介绍了“JavaScript属性节点有哪些类型”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2022-10-19
  • vue中有哪些属性
    vue中常用的属性有7个,分别是el属性、data属性、template属性、methods属性、render属性、computed属性、watch属性等。用法介绍:el属性:用来指示vue编译器从什么地方开始解析 vue的语法,可以说是一...
    99+
    2022-10-12
  • 在css中float属性有哪些属性值
    这篇“在css中float属性有哪些属性值”文章,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要参考一下,对于“在css中float属性有哪些属性值”,小编整理了以下知识点,请大家跟着小编的步伐一步一步的慢慢理解,接...
    99+
    2023-06-06
  • jQuery特殊属性操作有哪些
    这篇文章主要介绍“jQuery特殊属性操作有哪些”,在日常操作中,相信很多人在jQuery特殊属性操作有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”jQuery特殊属性...
    99+
    2022-10-19
  • javascript中有哪些作用
    这篇文章主要介绍了javascript中有哪些作用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。JavaScript有什么特点1、js属于一种解释性脚本语言;2、在绝大多数浏...
    99+
    2023-06-15
  • mysql中属性锁有哪些
    mysql中属性锁有哪些?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1、共享锁也叫读锁,简称S锁;当一个事务为数据添加读锁时,其他事务只能为数据添加读锁,而不能为数据添加写锁...
    99+
    2023-06-14
  • css中Color属性有哪些
    这篇文章将为大家详细讲解有关css中Color属性有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 属性 描绘 CSS color-p...
    99+
    2022-10-19
  • CSS3中filter属性有哪些
    小编给大家分享一下CSS3中filter属性有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!css3的滤镜filter属性,...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作