在javascript函数体内,标识符arguments具有特殊含义。它是调用对象的一个特殊属性,用来引用Arguments对象。Arugments对象就像数组,注意这里只是像并不是哈。
javascript函数体内,arguments像数组(并不是真的数组,是一个Arguments对象,再次强调)一样,有length属性,可以代表传给函数的参数的个数。
引用一个形式参数可以用参数名,也可以用arguments[]数组形式,其中arguments[0]表示第一个参数。
所以,javascript中Arguments对象是函数的实际参数,下面,我们一起来进入这神奇的国度,一窥究竟。
arguments.length属性:
js不会主动为你判断你到底给函数传了多少个参数,如果你多传了,多余的部分就没有被使用,如果你少传了,那么没传的参数值就是undefined
所以我们可以借助arguments的length属性来检测调用函数时是否使用了正确数目的实际参数,因为javascript是不会为你做这些事的
function f(x,y,z)
{
//首先检查传递的参数数量是否正确
if(arguments.length != 3)
{
throw new Error("function f called with " + arguments.length + "arguments ,but it not 3 arguments.");
}
//下面运行真正的函数
}
arguments还为我们提供了这样一种可能,就是为一个函数传任意数目的实际参数:
比如说,我想判断你传给我的一些数字的大小,取出最大的那个,对,没错,你传多少参数都行,但是前提是你要传数字,因为我在函数内部懒得判断了。呵。
function max()
{
//根据我上一篇日志,这已经是JavaScript内最小的数字了
var m = Number.NEGATIVE_INFINITY;
for(var i = 0; i < arguments.length; i++)
{
//只要有任何一个参数比m大,那么m就变成了这个参数的值
if(arguments[i] > m)
m = arguments[i];
}
return m;
}
怎么样?这个方法很巧妙吧?呵呵。
说明一下arguments与真正传的形式参数是一致的:
比如,你给函数传了一个叫param的参数,并且只有这一个参数,那么param与arguments[0]都是对这个参数值的引用,
改变其中一个值,即改变了二者所有的值
function change(param)
{
//比如我传的param为simaopig,那么alert就是simaopig,
//如果啥也没传就会alert undefined
alert(param);
//用arguments[0]改变了这个参数的值
arguments[0] = 'xiaoxiaozi';
//没错,这个值变成了xiaoxiaozi
alert(param);
}
arguments的callee属性:
arguments的callee属性是用来引用当前正在执行的函数,这对未命名的函数调用自身非常有好处。
还记得我上一篇中用函数直接量定义的函数实现递归的函数吗?
那里面,我提到可以为函数直接量以函数名。这样实现递归可以很方便的调用自己。
现在用arguments的这个callee同样可以简单的实现
//用函数直接量,采用arguments.callee属性实现递归函数
var result = function(x){
if(x<=1) return 1;
return x*arguments.callee(x-1);
};
在最后提醒大家一点,既然这个arguments这么厉害,那么我们就不要为变量命名为arguments了,事实上arguments是javascript的保留字之一。
分享到:
相关推荐
Arguments对象是JavaScript中一个特殊的数据结构,主要用于在函数内部存储传递给函数的所有参数。无论函数定义了多少个参数,Arguments对象都会包含所有实际传递的参数。这篇深度研究主要探讨了Arguments对象的几个...
总之,`arguments`对象是JavaScript函数中一种非常重要的机制,它提供了一种访问函数参数的方式,增强了JavaScript函数的灵活性。通过`arguments`对象,我们可以编写出能够处理不定数量参数的函数,并且可以通过`...
本文将从JavaScript函数的基本构成入手,探讨其特性及其在实际应用中的意义。 #### 二、函数名与匿名函数 在大多数面向对象的语言中,函数通常都会有一个明确的名字,这有助于理解和调用。然而,在JavaScript中,...
ES6引入的新特性,使函数参数处理更加灵活: ```javascript function greet(name = 'World') { console.log('Hello, ' + name); } greet(); // 输出 "Hello, World" let [first, ...rest] = ['a', 'b', 'c']; ...
1. **模块化**: 通过将代码分割成小的独立单元——函数,可以更容易地管理和维护整个程序。每个函数负责单一的功能,有助于提高代码的可读性和可维护性。 2. **抽象性**: 函数可以隐藏内部实现细节,仅对外提供接口...
在这个主题中,我们将深入探讨JavaScript程序设计中的一个关键概念——剩余参数(Rest Parameters),这是ES6引入的一项重要特性。 剩余参数允许我们在函数定义中使用三个点(...)来收集传入的任意数量的参数,...
3. **无`arguments`绑定**:箭头函数没有自己的`arguments`对象,如果需要参数列表,可以通过剩余参数(rest parameters)`...`来获取。 4. **不能作为Generator函数**:箭头函数不能用作生成器(generator)函数,...
5. **函数内部属性**:函数内部有两个特殊的对象——`arguments`和`this`。 - `arguments`对象:它是一个类数组对象,包含了传入函数的所有参数。`arguments.callee`属性指向包含该`arguments`对象的函数,但在ES5...
——————————————————————————– 这个有点类似于php 中的 func_get_args() 函数,也是获取函数参数的数组。 例(以下是php代码): 复制代码 代码如下: function uses () { $args =func_get_...
普通函数还涉及到一个特殊的对象——arguments,它包含了传递给函数的所有参数,这在参数数量不定的情况下非常有用。如果函数没有返回值,那么其返回值默认为undefined。 匿名函数是函数名缺失的一种函数表达式,...
标签清晰地指出了文档的核心主题——JavaScript语言下的匿名函数。这不仅限定了讨论范围,也便于对该主题感兴趣的读者快速定位到相关资源。 #### 部分内容详解: 文档的部分内容涉及到了匿名函数的各种应用场景和...
JavaScript学习笔记——深入理解基础与函数 在JavaScript中,学习基础知识是至关重要的,因为它是所有进一步编程技巧的基础。首先,我们需要了解JavaScript中的数据类型。在JavaScript中,有五种简单的数据类型:...
首先,JavaScript中的函数参数是通过一个名为arguments的对象来传递的。这个对象包含了所有传递给函数的参数,而不仅仅是函数声明定义的参数列表。_arguments_对象具有一个length属性,它可以用来判断实际传递给函数...
然后重点讲解了箭头函数的几个重要特性,包括不绑定自身的this值而继承外部上下文的this值,不可用作构造器创建新实例对象以及不能访问arguments伪数组等问题。最后提供了多个具体的代码实例帮助理解。 适用人群:...
函数可以接受参数,并通过`arguments`对象访问未指定参数名的额外参数。另外,JavaScript还支持闭包,即一个函数可以访问并操作其外部作用域的变量,即使在其外部函数已经执行完毕后。 异步编程是JavaScript的另一...
虽然arguments的主要用途是保存函数参数,但这个对象有一个属性——callee,该属性是一个指针,指向拥有这个arguments对象的函数 所以callee的作用就是来指向当前对象 看一个阶层函数的例子就会明白他的用途了: /*...
这可以通过在函数内部使用`arguments`对象或设置默认值来实现。 ```javascript $.fn.myFunction = function(options) { var defaults = { param1: 'default1', param2: 'default2' }; var settings = $....
rest参数必须位于函数参数列表的末尾,并且只能出现一次。 对于参数的处理,JavaScript允许在调用函数时传递比定义的参数多或少的参数。如果传递的参数比定义的少,那么未定义的参数将默认为`undefined`;如果传递...
- JavaScript拥有独特的作用域机制——基于函数的作用域。闭包是函数和与其相关的引用环境的组合,允许函数访问并操作其定义时所在环境中的变量。这种能力在编写异步代码或处理事件驱动逻辑时尤其强大。 3. **...
在编写JavaScript代码时,尤其是在处理函数参数时,考虑使用rest参数可以提升代码质量。通过实践和理解rest参数,可以更好地运用在实际项目中,提高开发效率。如果想进一步探索JavaScript的相关知识,可以查阅...