javascript 利用arguments实现可变长参数


Posted in Javascript onNovember 21, 2016

javascript arguments解释,实现可变长参数。

在C#中,有可变长参数params[],但是在js中,如何实现这种可变参数呢?

一、可变长参数

arguments是非常好的解决方法,一直不知道javascript有这个东西。

先来看看应用场景,使用arguments传入任意个数的参数到js函数里的写法。

function Test() {
  console.log(arguments[0]);
  console.log(arguments[1]);
  console.log(arguments[2]);
};
Test(1, 2, 3);

输出 1 2 3;

当然,你也可以在javascript函数里放一个数组,但是它是固定长度的。

二、不要直接修改arguments对象

arguments对象类似于数组,但实际上它也并不是数组,使用call方法,可能将数组的shift函数用到它身上,但是尽量不要尝试去改动arguments。很容易造成混乱。

如果确实要修改,可以将arguments的内容复制到一个新数组上,然后在新数组上进行修改。

var args = [].slice.call(arguments);

用变量绑定arguments,实现跨函数访问

arguments变量是被隐式绑定到每个函数体内的,注意是每一个函数内部。

一个迭代器的例子能够说明这个问题;

function values() {
 //values有自己的arguments
 var i = 0, n = arguments.length;
 return {
  hasNext: function () {
   return i < n;  //hasNext 有自己的arguments
  },
  next: function () {
   if(i >= n)
   {
    throw new Error("已经是最后一个元素!");
   }
   return arguments[i++];  //next 有自己的arguments
  }
 }
}
 
var it = values(1, 2, 3, 4, 5, 6, 7);
console.log(it.next());  //undefined
console.log(it.next());  //undefined
console.log(it.next());  //undefined

如果要访问外层函数的arguments,那么只能通过局部变量绑定的方式,在内层就能够访问,上面的例子可以改造成

function values() {
 //values有自己的arguments
 var i = 0, n = arguments.length, ourterArgs = arguments;
 return {
  hasNext: function () {
   return i < n;  //hasNext 有自己的arguments
  },
  next: function () {
   if(i >= n)
   {
    throw new Error("已经是最后一个元素!");
   }
   return ourterArgs[i++];  //ourterArgs 外层保存的 arguments
  }
 }
}
 
var it = values(1, 2, 3, 4, 5, 6, 7);
console.log(it.next());  //1
console.log(it.next());  //2
console.log(it.next());  //3

以上所述是本文的全部内容,希望对大家有所帮助,谢谢对三水点靠木的支持!

Javascript 相关文章推荐
Javascript调用XML制作连动下拉列表框
Jun 25 Javascript
Jquery UI震动效果实现原理及步骤
Feb 04 Javascript
extjs3 combobox取value和text案例详解
Feb 06 Javascript
javascript页面加载完执行事件代码
Feb 11 Javascript
改变隐藏的input中value值的方法
Mar 19 Javascript
JavaScript的原型继承详解
Feb 15 Javascript
Javascript仿新浪游戏频道鼠标悬停显示子菜单效果
Aug 21 Javascript
jquery中键盘事件小结
Feb 24 Javascript
javaScript事件机制兼容【详细整理】
Jul 23 Javascript
详解Vue学习笔记入门篇之组件的内容分发(slot)
Jul 17 Javascript
解决vue init webpack 下载依赖卡住不动的问题
Nov 09 Javascript
jQuery实现鼠标拖动图片功能
Mar 04 jQuery
js 点击a标签 获取a的自定义属性方法
Nov 21 #Javascript
浅谈JS读取DOM对象(标签)的自定义属性
Nov 21 #Javascript
AngularJS Phonecat实例讲解
Nov 21 #Javascript
浅谈React 属性和状态的一些总结
Nov 21 #Javascript
JavaScript中关于for循环删除数组元素内容时出现的问题
Nov 21 #Javascript
jQuery用FormData实现文件上传的方法
Nov 21 #Javascript
遍历js中对象的属性和值的实例
Nov 21 #Javascript
You might like
php trim 去除空字符的定义与语法介绍
2010/05/31 PHP
php+mysqli预处理技术实现添加、修改及删除多条数据的方法
2015/01/30 PHP
深入理解PHP内核(二)之SAPI探究
2015/11/10 PHP
javascript之卸载鼠标事件的代码
2007/05/14 Javascript
一个轻量级的javascript库 pj介绍
2010/12/19 Javascript
JavaScript将Table导出到Excel实现思路及代码
2013/03/13 Javascript
原生js实现给指定元素的后面追加内容
2013/04/10 Javascript
带左右箭头图片轮播的JS代码
2013/12/18 Javascript
javascript实现数字验证码的简单实例
2014/02/10 Javascript
JavaScript在IE和FF下的兼容性问题
2014/05/19 Javascript
javascript加载xml 并解析各节点的值(实现方法)
2016/10/12 Javascript
自定义事件解决重复请求BUG的问题
2017/07/11 Javascript
详解vue中引入stylus及报错解决方法
2017/09/22 Javascript
详解如何理解vue的key属性
2019/04/14 Javascript
js核心基础之闭包的应用实例分析
2019/05/11 Javascript
TypeScript 引用资源文件后提示找不到的异常处理技巧
2020/07/15 Javascript
python实现系统状态监测和故障转移实例方法
2013/11/18 Python
Python实现Youku视频批量下载功能
2017/03/14 Python
pandas Dataframe行列读取的实例
2018/06/08 Python
vim自动补全插件YouCompleteMe(YCM)安装过程解析
2019/10/21 Python
Python如何通过Flask-Mail发送电子邮件
2020/01/29 Python
Python基于Socket实现简单聊天室
2020/02/17 Python
解决python运行启动报错问题
2020/06/01 Python
Django model class Meta原理解析
2020/11/14 Python
python 三种方法实现对Excel表格的读写
2020/11/19 Python
使用 css3 transform 属性来变换背景图的方法
2019/05/07 HTML / CSS
css3 旋转按钮 使用CSS3创建一个旋转可变色按钮
2012/12/31 HTML / CSS
使用phonegap获取位置信息的实现方法
2017/03/31 HTML / CSS
手把手教你实现一个canvas智绘画板的方法
2019/03/04 HTML / CSS
俄罗斯园林植物网上商店:Garshinka
2020/07/16 全球购物
乌鸦喝水教学反思
2014/02/07 职场文书
爱心捐书活动总结
2014/07/05 职场文书
个人作风纪律整顿整改措施
2014/10/25 职场文书
2014年销售经理工作总结
2014/12/01 职场文书
2016七夕情人节感言
2015/12/09 职场文书
PYTHON InceptionV3模型的复现详解
2022/05/06 Python