一.在JavaScript中,arguments对象是比较特别的一个对象,实际上是当前函数的一个内置属性。arguments非常类似Array,但实际上又不是一个Array实例。可以通过如下代码得以证实(当然,实际上,在函数funcArg中,调用arguments是不必要写成funcArg.arguments,直接写arguments即可)。
Array.prototype.testArg = "test"; function funcArg() { alert(funcArg.arguments.testArg); alert(funcArg.arguments[0]); } alert(new Array().testArg); // result: "test" funcArg(10); // result: "undefined" "10"
二.arguments对象的长度是由实参个数而不是形参个数决定的。形参是函数内部重新开辟内存空间存储的变量,但是其与arguments对象内存空间并不重叠。对于arguments和值都存在的情况下,两者值是同步的,但是针对其中一个无值的情况下,对于此无值的情形值不会得以同步。如下代码可以得以验证。
function f(a, b, c){ alert(arguments.length); // result: "2" a = 100; alert(arguments[0]); // result: "100" arguments[0] = "qqyumidi"; alert(a); // result: "qqyumidi" alert(c); // result: "undefined" c = 2012; alert(arguments[2]); // result: "undefined" } f(1, 2);
三.由JavaScript中函数的声明和调用特性,可以看出JavaScript中函数是不能重载的。
根据其他语言中重载的依据:"函数返回值不同或形参个数不同",我们可以得出上述结论:
第一:Javascript函数的声明是没有返回值类型这一说法的;
第二:JavaScript中形参的个数严格意义上来讲只是为了方便在函数中的变量操作,实际上实参已经存储在arguments对象中了。
另外,从JavaScript函数本身深入理解为什么JavaScript中函数是不能重载的:在JavaScript中,函数其实也是对象,函数名是关于函数的引用,或者说函数名本身就是变量。对于如下所示的函数声明与函数表达式,其实含以上是一样的(在不考虑函数声明与函数表达式区别的前提下),非常有利于我们理解JavaScript中函数是不能重载的这一特性。
function f(a){ return a + 10; } function f(a){ return a - 10; } // 在不考虑函数声明与函数表达式区别的前提下,其等价于如下 var f = function(a){ return a + 10; } var f = function(a){ return a - 10; }
四.arguments对象中有一个非常有用的属性:callee。arguments.callee返回此arguments对象所在的当前函数引用。在使用函数递归调用时推荐使用arguments.callee代替函数名本身。
如下:
function count(a){ if(a==1){ return 1; } return a + arguments.callee(--a); } var mm = count(10); alert(mm);
文章来源:http://www.cnblogs.com/lwbqqyumidi/archive/2012/12/03/2799833.html
相关推荐
JavaScript中的`arguments`对象是一个非常实用的特性,它允许函数接收任意数量的参数,而不仅仅是预先定义好的。在JavaScript函数内部,`arguments`对象提供了一种访问这些参数的方法,无论函数声明时指定了多少参数...
4. **arguments对象与形参的关系**:如果函数定义了形参,那么形参变量会自动绑定到`arguments`对象中对应的值。例如,函数`function foo(a, b) { console.log(a, b); }`调用`foo(1, 2)`时,`a`和`b`将分别得到`...
arguments还有一个特殊的行为,那就是它会将所有的实际参数都当作对象来看待,对于基本数据类型的实际参数则会转换为其对应的对象类型。这可以通过在函数内定义与形式参数同名的变量并赋值来判断。在say函数中,我们...
11. **箭头函数Arrow Functions**: 箭头函数提供了一种更简洁的函数定义方式,其`this`值继承自父作用域,不绑定自己的`arguments`对象。 12. **Map 和 Set**: 这两种数据结构提供了更高效、灵活的键值对存储。Map...
总结起来,arguments对象是JavaScript函数中一个非常有用的特性,尤其是在处理不确定数量参数的函数时。它虽然不是一个数组,但是提供了足够的方法来访问和操作函数的参数。通过学习如何利用arguments对象,我们可以...
Arguments对象是JavaScript中一个特殊的数据结构,主要用于在函数内部存储传递给函数的所有参数。无论函数定义了多少个参数,Arguments对象都会包含所有实际传递的参数。这篇深度研究主要探讨了Arguments对象的几个...
JavaScript中的arguments对象是一个特殊对象,它代表当前正在执行的函数的参数集合。这个对象可以在函数体内直接使用,无须提前声明参数名即可访问参数。每一个JavaScript函数作用域内都有一个名为arguments的局部...
在JavaScript编程中,arguments对象是一个非常有用的概念,尤其是在处理函数参数方面。在许多编程语言中,如PHP,函数参数可以设置默认值,这样当调用函数时,如果缺少参数,就会自动使用预设的默认值。但在...
JavaScript中的arguments对象是函数内预定义的一个类数组对象,它包含了传递给函数的所有参数值。尽管在现代JavaScript开发中,ES6引入了更灵活的参数处理方式,如rest参数和默认参数,但在学习和理解JavaScript时,...
ECMAScript中的函数并不介意传递的参数有多少,也不介意是什么类型。由于JavaScript允许函数有不定数目的参数,所以我们需要一种机制,可以在 函数体内 ...这篇文章将详细介绍Javascript中的arguments对象和使用方法。
JavaScript中的arguments对象是一个非常有用的内置对象,它存在于所有函数体内,特别是当函数被调用时。它为函数提供了一种访问所有传递给函数的参数的方法。由于JavaScript本身不支持函数重载的机制,arguments对象...
在JavaScript编程中,arguments对象是一个非常重要的内置对象,它在函数内被自动创建,用以存储函数接收到的所有参数。虽然它看起来像数组,也拥有类似数组的访问方式,但arguments并不是一个真正的数组对象,因此它...
### JavaScript面向对象要点总结 在JavaScript中,面向对象编程(OOP)是一种广泛采用的编程范式,它允许开发者创建可重用、模块化的代码。本文将深入探讨JavaScript面向对象的关键概念,包括构造函数、原型链、...
尽管它看起来和数组类似,拥有`length`属性,但它并不是真正的数组,而是一个特殊的Arguments对象。这意味着不能直接应用数组的方法如`push`, `pop`, `slice`等,但可以通过索引来访问参数值。 2. **`arguments`...
`arguments`对象用于访问函数调用时传入的所有参数,`call()`和`apply()`可以改变函数调用的上下文。 6. **日期和时间Date**: `Date`对象用于处理日期和时间,`new Date()`创建一个新实例,`getFullYear()`、`...