js参数arguments的理解

原文地址:js参数arguments的理解

对于函数的参数而言,如下例子

function say(name, msg){

alert(name + ‘say‘ + msg);

}

say(‘xiao‘, ‘hello‘);

  

当调用say()函数时,函数会创建arguments参数数组,这个数组跟形参没有多大关系,即使没有形参,

function say(){
alert(arguments[0] + ‘say‘ + arguments[1]);
}
say(‘xiao‘, ‘hello‘);

  

在函数内部可以使用arguments参数数组的形式调用。这就说明命名的参数即形参不是必须的,只是为了提供便利。

如果没有形参,我们可以在函数内部利用arguments数组的长度来判断参数的个数,从而执行相应的代码,可以达到函数重载的效果。

还有就是,既然我们有形参的存在,那么形参跟arguments数组有什么关系呢?

可以算得上是一一对应的关系,如果我们参数有3个,而传递的只有2个,那么第三个形参的值就默认为undefined,就跟定义了这个变量没有给他初始化一样。

function say(name,msg,str){
alert(str);
}
say(‘xiao‘, ‘hello‘); //undefined

  

形参的值跟一一对应的arguments参数数组中的值始终保持同步的。

function doAdd(num1, num2){
 num1 = 10;
 alert(arguments[0]);
}
doAdd(5, 5); //得到10

  

相反

function doAdd(num1, num2){
  arguments[0] = 10;
 alert(num1 + num2);
}
doAdd(5, 5);//得到15

  

另外需要注意的是,在严格模式下,上面的做法是错误的,不能在函数内部重写arguments的值,会报错。
所有的参数传递都是通过传值,而不是引用,可以参见这篇文章,js函数参数传值与引用

时间: 2024-08-24 09:31:01

js参数arguments的理解的相关文章

js 参数arguments小记

最近小猫又抽风,不学css,看起了js.不过有学习了一项新的技能. js中的arguments代表了参数组,当我们的参数不固定是可以使用这个求和神马的. function sum(){ var result=0; alert(arguments.length); for(var i=0;i<arguments.length;i++){ result+=arguments[i]; } return result; }; window.onload=function(){ alert(sum(1,2

js理解参数-arguments对象

js理解参数-arguments对象: 1. ECMAScript函数的参数: ECMAScript函数的参数在内部是用一个数组来表示的,函数接收到的始终是这个数组,而不关心数组中包含多少个参数,也不在乎传进来的参数是什么数据类型. 在函数体内可以通过arguments对象来访问这个参数数组. 2. 关于命名参数的问题: ECMAScript函数中命名的参数只提供便利,但不是必需的.在ECMAScript中,解析器不会验证命名参数,而是通过访问arguments对象的length属性获得参数的个

在js中arguments对象的理解

一.在函数调用的时候,浏览器每次都会传递进两个隐式参数 函数的上下文对象this 封装实参的对象arguments 二.arguments 对象 arguments 对象实际上是所在函数的一个内置类数组对象 每个函数都有一个arguments属性,表示函数的实参集合,这里的实参是重点,就是执行函数时实际传入的参数的集合.arguments不是数组而是一个对象,但它和数组很相似,所以通常称为类数组对象,以后看到类数组其实就表示arguments.arguments对象不能显式的创建,它只有在函数开

js的arguments迪士尼彩乐园菠菜网站源码开发到底是什么?

arguments的一些妙用1.利用arguments实现方法的重载 下面我们利用arguments对象来实现一个参数相加的函数,不论传入多少参数都行,将传入的参数相加后返回. function add() {var len = arguments.length,sum = 0;for(;len--;){sum += arguments[len];}return sum;} console.log( add(1,2,3) ); //6console.log( add(1,3) ); //4con

js 模块化的一些理解和es6模块化学习

模块化 1 IIFE 2 commonjs 3 浏览器中js的模块化 4 简单理解模块加载器的原理  5 es6 之前在参加百度前端技术学院做的小题目的时候,自己写模块的时候 都是写成立即调用表达式(IIFE)的模式,比如单个功能的时候当时想到是不会涉及到全局变量的污染,在封装基础的模块(比如里面的表单验证功能) (function(win){ var obj = {}; function add() { console.log("add"); } obj.add = add; win

js方法作为js参数调用

需求:弹层 问题:需要两种弹层,一种为只弹出消息,另一种是点击确定需要执行js方法. 分析:第一种不考虑,第二种需要用到 js方法作为js参数调用. 代码: function messageLayer(msg,callback){ //弹层调用 alert(msg); if (callback!=undefined){ callback(); } } 调用方法: sweetalert('success',function(){ window.location.href="http://www.c

JS中的prototype理解

JS中的phototype是JS中比较难理解的一个部分 本文基于下面几个知识点: 1 原型法设计模式 在.Net中可以使用clone()来实现原型法 原型法的主要思想是,现在有1个类A,我想要创建一个类B,这个类是以A为原型的,并且能进行扩展.我们称B的原型为A. 2 javascript的方法可以分为三类: a 类方法 b 对象方法 c 原型方法 例子: function People(name){  this.name=name;  //对象方法  this.Introduce=functi

[译]Javascript 参数(arguments)对象

本文翻译youtube上的up主kudvenkat的javascript tutorial播放单 源地址在此: https://www.youtube.com/watch?v=PMsVM7rjupU&list=PL6n9fhu94yhUA99nOsJkKXBqokT3MBK0b Javascript 参数(arguments)对象是一个在所有函数中都可用的本地变量.其包含了所有传给函数的参数,并且像数列一样排着序.参数对象的长度就是传给函数的参数个数. JavaScript 参数对象例子: fu

JS中异常处理的理解

[转]JS中异常处理的理解 JS里的异常处理 JS的异常捕获与处理可以从它的 try-catch 语法结构说起,具体形式如下: try{ ... //异常的抛出 }catch(e){ ... //异常的捕获与处理 }finally{ ... //结束处理 } 其中,try块: try块包含的是可能产生异常的代码,在这里面直接或者在里面通过调用函数里间接抛出的异常都可以捕获到.部分浏览器还可以找到具体抛出的位置.详见e.stack. catch块: catch块,是捕获异常,并处理异常的地方,包括