`
gcz564539969
  • 浏览: 12091 次
文章分类
社区版块
存档分类
最新评论

javascript:传递给函数的隐含参数:arguments

 
阅读更多

众所周知,js是脚本语言,脚本语言的一个特点就是极其灵活。有时“灵活”到使我这种习惯c系主流语言的人不得不佩服脚本的强大。比如这里要讲到的arguments参数。本人第一次看到这个东东的时候,以为就是“变相”的普通参数,只不过不用在定义函数的时候明确声明而已。
不过,代码是廉价的(Code is cheap.)看代码:

function funcTest(a, b) {
     alert(a);
     alert(b);
     for (var i = 0; i < arguments.length; i++) {
         alert(arguments[i]);
     }
 }
 
function test() {
     funcTest(1, 2, 3); // 放到html页进行执行
 }


代码运行后怎么样,不错,这里的length实在是很奇怪,对不对?我们来看书中是怎么说的,“代码运行时会依次显示:1,2,1,2,3。因此,在定义函数的时候,即使不指定参数列表,仍然可以通过arguments引用到所获得的参数,这给编程带来了很大的灵活性”。没有比这句更加精辟的阐释了。
看到这里,我们可能都有一个疑问(如果你稍微具备一点js编程知识的话),arguments参数是不是js数组对象的一个实例?下面的代码会帮你解决这个疑点:

Array.prototype.testArg = "test arguments";
 function funcArg() {
     alert(arguments.testArg);
 }
 function test() {
     alert(new Array().testArg);
     funcArg();
 }


代码运行结果是先弹出"test arguments"和"undefined",为什么funcArg调用返回“undefined”?看到这里相信你对上面的疑问已经消除。
到这里你以为你掌握了arguments的全部?那就太小瞧js的天才设计者(们)了,下面看另外一个有才的设计:
Q:使用递归来计算1 到n 的自然数之和

A1:

function sum(n) {
     if (1 == n) return 1;
     else return n + sum(n - 1);
 }
 
function test() {
     alert(sum(100)); ; // 放到html页进行执行
 }


A2:

function sum(n) {
     if (1 == n) return 1;
     else return n + arguments.callee(n - 1);
 }
 
function test() {
     alert(sum(100)); ; // 放到html页进行执行
 }


A1和A2这两个回答都解决了问题,相信第一种方法是大多数人的常规做法,但是js推荐使用第二种,原书说A1这种方式“其中函数内部包含了对sum 自身的调用,然而对于JavaScript 来说,函数名仅仅是一个变量名,在函数内部调用sum 即相当于调用一个全局变量,不能很好的体现出是调用自身”,sum都调用sum了,还说“不能很好的体现出是调用自身”,为什么呢?
书到用时方恨少,查书,书上是这么写的:“arguments 对象的另一个属性是callee,它表示对函数对象本身的引用,这有利于实现无名函数的递归或者保证函数的封装性,”这话我承认说的有理,我从来都对书本尤其是技术类的书本保持高度的信任,可是这里说“arguments 对象的另一个属性是callee”,这里“arguments ”怎么成“对象”了?标题都说“传递给函数的隐含参数:arguments ”,难道抄书抄错了?查看电子书,靠,复制粘贴还会有错?
对象,对象?对象何其多,下篇找"对象"。

分享到:
评论

相关推荐

    javascript arguments 传递给函数的隐含参数

    众所周知,js是脚本语言,脚本语言的一个特点就是极其灵活。有时“灵活”到使我这种习惯c系主流语言的人不得不佩服脚本的强大。比如这里要讲到的 arguments参数。

    理解Javascript函数形式参数与arguments

    理解Javascript函数形式参数与arguments

    reverse-arguments:反转传递给函数的参数

    反转传递给函数的参数。 安装 npm install reverse-arguments 用法 基本用法 var reverse = require ( 'reverse-arguments' ) ; function join ( ) { return Array . prototype . slice . call ( arguments ) . ...

    深入理解javascript函数参数与闭包

    1.函数参数  1.1:参数是什么  1.2:参数的省略  1.3:参数默认值  1.4:参数传递方式  1.5:同名参数  1.6:arguments对象 2.闭包  2.1:闭包定义  2.2:立即调用的函数表达式(IIFE, Immediately invoked ...

    shift-arguments:移动 javascript 函数参数以更好地与不同框架集成

    移位参数 移动 javascript 函数参数以更好地与不同框架集成 npm install shift-arguments用法删除参数 var shiftArguments = require('shift-arguments');function testFunc (result) {}function doSthAsync ...

    js的隐含参数(arguments,callee,caller)使用方法

    在提到上述的概念之前,首先想说说javascript中函数的隐含参数: arguments arguments 该对象代表正在执行的函数和调用它的函数的参数。[function.]arguments[n]参数function:选项。当前正在执行的 Function 对象的...

    flat-arguments:展平函数的参数。 喜欢,真的变平了

    展平函数的参数。 就像,真的变平了。 安装 npm install flat-arguments --save 用法 正常参数 var flatten = require ( 'flat-arguments' ) ; function letsDoThis ( ) { var args = flatten ( arguments ) ; /...

    javascript函数的解释

    javascript函数的解释,解释了具体函数的功能,一、函数JavaScript函数集合 1.document.write(""); 输出语句 2.JS中的注释为// 3.传统的HTML文档顺序是:document-&gt;html-&gt;(head,body) 4.一个浏览器窗口中的DOM顺序是:...

    Javascript学习笔记之函数篇(四):arguments 对象

    JavaScript中arguments函数对象是该对象代表正在执行的函数和调用它的函数的参数。JavaScript 函数中 arguments 为特殊对象,无需明确指出参数名,就能访问它们。

    解决python脚本中error: unrecognized arguments: True错误

    主要介绍了解决python脚本中error: unrecognized arguments: True错误,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    轻松学习JavaScript函数中的 Rest 参数

    JavaScript函数允许未知数量的函数参数。在ECMAScript 6之前,JavaScript有一个变量来访问这些未知或可变数目的参数,这是一个类似数组的对象,并非一个数组。细想以下代码来理解arguments变量: function add(){ ...

    JS函数动态传递参数的方法分析【基于arguments对象】

    js函数体内可以通过arguments对象来接收传递进来的参数,利用这一对象属性可以动态传参。 function box() { return arguments[0]+' | '+arguments[1]; //得到每次参数的值 } alert&#40;box(1,2,3,4,5,6&#41;); //...

    前端教程:21 函数 arguments

    千锋Web前端教程_21_函数_arguments

    JavaScript 函数参数

    JavaScript 函数参数 JavaScript 函数对参数的值没有进行任何的检查。 函数显式参数(Parameters)与隐式参数(Arguments) 在先前的教程中,我们已经学习了函数的显式参数: functionName(parameter1, parameter2, ...

    06-函数的arguments参数.html

    06-函数的arguments参数.html

    Python基础教程:函数参数和注解.pdf

    Python基础教程:函数参数和注解 四种参数 Python函数func定义如下: def func(first, *args, second="Hello World", **kwargs): print(first) print(args) print(second) print(kwargs) func("lisi", "san", py=...

    mixedargs:JavaScript混合函数参数

    混合Args 这是用于创建接受参数的多个组合的函数的简单工具。 可以在NodeJS或浏览器中使用。安装NodeJS: $ npm install mixedargs --save 浏览器: $ bower install mixedargs -- save用法//In node onlyvar ...

    深入理解JavaScript函数参数(推荐)

    函数不介意传递进来多少个参数,也不在乎传进来的参数是什么数据类型,甚至可以不传参数。 arguments  javascript中的函数定义并未指定函数形参的类型,函数调用也未对传入的实参值做任何类型检查。实际上,...

Global site tag (gtag.js) - Google Analytics