摘要:是一个类数组对象,包含着传入函数中的所有参数。虽然的主要用途是保存函数参数,但是这个对象还有一个名叫的属性,该属性是一个指针,指明拥有这个对象的函数。
arguments
arguments是一个类数组对象,包含着传入函数中的所有参数。虽然arguments的主要用途是保存函数参数,但是这个对象还有一个名叫callee的属性,该属性是一个指针,指明拥有这个arguments对象的函数。
例子:
function factorial(num){ if(num<=1){ return 1 }else { return num * factorial(num-1) } }
上面的代码实现了阶乘函数的递归实现,但是这个函数的执行与函数名factorial紧紧耦合在了一起,如果出现下面这样的情况,就会出问题:
var fn = factorial factorial = null fn(10) // error: factorial is not a function
为了解决这种问题,可以使用arguments的callee属性:
function factorial(num){ if(num<=1){ return 1 }else { return num * arguments.callee(num-1) } }
通过使用arguments对象的callee属性,无论引用函数使用的是什么名字,都可以保证正常完成递归调用。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/83343.html
摘要:在不设置全局标志的情况下,在同一个字符创上多次调用将始终返回第一个匹配项的信息。 字面量定义正则表达式 ECMAScript通过RegExp类型来支持正则表达式 var expression = / pattern / flags:模式(pattern)部分可以是任何简单或复杂的正则表达式,标志(flag)部分用来标明正则表达式的匹配模式 正则表达式的匹配模式支持下列3个标志: ...
摘要:引用计数另一种不太常见的垃圾回收策略是引用计数。引用计数的含义是跟踪记录每个值被引用的次数。在采用引用计数的策略中,由于函数执行之后,这两个对象都离开了作用域,函数执行完成之后,和还将会继续存在,因为他们的引用次数永远不会是。 垃圾回收的必要性 由于字符串、对象和数组没有固定大小,所以当他们的大小已知时,才能对他们进行动态的存储分配。JavaScript程序每次创建字符串、数组或对象时...
摘要:首先来看一个例子我们知道基本数据类型有还有一种复杂数据类型基本类型不是对象从逻辑上讲是不应该有方法的其实为了让我们能够对进行相关操作后台已经自动完成了一系列的处理当第二行代码访问时访问过程处于一种读取模式也就是从内存中读取这个字符串的值而在 首先来看一个例子 var s1 = some text; var s2 = s1.substring(2); var s3 = new Strin...
摘要:方法将所有在过滤函数中返回的数组元素放进一个新数组中并返回。方法从左到右为每个数组元素执行一次回调函数,并把上次回调函数的返回值放在一个暂存器中传给下次回调函数,并返回最后一次回调函数的返回值。 创建数组 var array = new Array(); var array = new Array(10); var array = new Array(red,blue,green);...
摘要:除语法不同外,两者的区别在于解析器读取的顺序。解析器会事先读取函数声明,即使你把函数声明放在代码的末端也没关系。修改对象将可能导致命名参数失去意义。其实除允许匿名函数递归调用自身外,并没有什么太大用处。 javaScript因为其语法松散,导致函数(尤其是this)看似简单,其实里面花头很多。本篇介绍一下JavaScript函数及其调用方法。• 函数声明和函数表达式• ar...
阅读 1372·2023-04-26 03:04
阅读 2213·2019-08-30 15:44
阅读 3710·2019-08-30 14:15
阅读 3454·2019-08-27 10:56
阅读 2654·2019-08-26 13:53
阅读 2594·2019-08-26 13:26
阅读 3043·2019-08-26 12:11
阅读 3577·2019-08-23 18:21