众所周知,对象arguments的主要用于保存函数参数,但这个对象还有一个名叫callee的属性,该属性是一个指针,用于指向拥有该arguments对象的函数。其一个很重要的用途就是降低函数与函数名的耦合程度。还是举例说明吧,请看下面这个非常经典的递归函数。
例1:
function factorial(num){
if(num<=1){
return 1;
}else{
return num*factorial(num-1);
}
}
在上面的这个例子中,如果函数名以后不会变的情况下,这样定义是没有问题的。但问题是这个函数的执行与函数名factorial紧紧耦合在一起。我们先看一个函数名改变的例子。
例2:
var trueFactorial = factorial;
factorial = function(){
return 0;
};
alert(trueFactorial(5));//0
alert(factorial(5));//0
这违背了我们的初衷,我们希望alert(trueFactorial(5));这条语句返回120。为了消除这种紧密耦合的现象,可以向下面这样使用arguments.callee。
例3:
function factorial(num){
if(num<=1){
return 1;
}else{
return num*arguments.callee(num-1);
}
}
修改之后,再执行例2,alert(trueFactorial(5));语句的结果为120,alert(factorial(5));语句的结果为0。即接触了函数体内的代码与函数名的耦合状态之后,trueFactorial()仍然可以正确的计算阶乘。
分享到:
相关推荐
在JavaScript中,`arguments` 和 `arguments.callee` 都是与函数参数相关的特殊对象,但它们的作用和用途略有不同。下面将详细解释这两个概念及其区别。 `arguments` 对象是一个类数组对象,它包含了函数调用时传入...
JavaScript中的隐含参数`arguments`, `callee`, 和 `caller`是函数内部的特殊变量,它们提供了关于函数调用的重要信息。下面将详细解释这三个参数的使用方法。 **arguments对象** `arguments`对象是一个非常有用的...
在早期的JavaScript开发中,arguments对象扮演着重要的角色,尤其是在处理不定数量参数的场景下。在这之中,arguments.callee属性是一个特殊的属性,它引用了正在执行的当前函数。 在介绍arguments.callee之前,...
总结,arguments对象提供了访问函数调用时所有参数的途径,caller属性提供了调用者的信息,callee属性指向当前执行的函数,apply方法允许动态设置函数调用的上下文和参数。理解和熟练使用这些特性,能够帮助开发者...
JavaScript中的arguments、caller和callee是与函数调用相关的几个重要概念,它们分别代表函数调用时传递的参数对象、调用当前函数的函数以及当前正在执行的函数。 首先,我们来了解arguments。在JavaScript中,当...
JavaScript中的`arguments.callee`是一个在函数内部引用当前正在执行的函数对象的属性。这个属性在函数递归、保持函数封装性以及匿名函数自我引用等场景中尤其有用。然而,由于`arguments`对象是一个相对昂贵的操作...
在JavaScript编程中,arguments、caller和callee是函数对象自带的三个隐含参数,它们为开发者提供了额外的函数执行信息,尤其在处理函数参数、递归调用以及调用栈追踪时非常有用。下面详细介绍这些隐含参数的使用...
JavaScript中的`arguments`对象是一个非常重要的特性,尤其在处理不确定数量的函数参数时。它不是一个真正的数组,但具有数组类似的行为,允许我们访问函数调用时传入的所有参数。在这个文档中,我们将深入探讨`...
### 理解JavaScript中的`caller`...综上所述,理解`caller`、`callee`、`call`、`apply`以及`arguments`对象在JavaScript编程中至关重要,它们不仅增强了函数的灵活性和复用性,还提供了深入分析和调试代码的强大工具。
在JavaScript编程语言中,`arguments`对象是一个非常重要的特性,特别是在处理函数参数时。它不是一个真正的数组,而是一个类数组对象,提供了访问函数调用时传递的所有参数的途径。无论函数定义了多少个形式参数...
这篇深度研究主要探讨了Arguments对象的几个关键特性,包括其作为伪数组对象的身份、length属性、参数访问方式以及callee属性。 首先,Arguments对象是一个伪数组对象,这意味着它拥有一个length属性,并且可以通过...
arguments.callee是JavaScript中的一个特殊对象,它指向正在执行的函数本身。这个特性在现代JavaScript编程中已经不推荐使用,但在老旧的代码中还是可以看到它的影子,特别是在使用递归调用函数时,arguments.callee...
总的来说,`arguments`对象提供了对函数参数的灵活访问,`arguments.length`和`arguments.callee`(虽然在现代JavaScript中不推荐使用)是两个关键属性,它们帮助开发者更好地理解和操作函数的参数。理解这些特性...
这个特性在早期版本的JavaScript(ES5之前)中被广泛使用,但在ES6及以后的版本中,由于对`arguments`对象进行了优化,并引入了剩余参数和默认参数等新特性,`arguments.callee`逐渐被淘汰。 `arguments.callee`的...
在JavaScript中,我们可以使用函数的arguments属性来获取调用函数时传递的参数。我们也可以使用函数的caller属性来获取调用当前函数的父函数的引用。 通过学习面向对象的JavaScript,我们可以提高开发效率和代码...
在JavaScript的函数对象中,`caller`属性表示调用当前函数的那个函数,而`callee`属性则是指代当前正在执行的函数本身。这两个属性在处理递归或者动态调用链时特别有用,因为它们可以提供关于调用栈的信息。 `...