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 相关文章推荐
[对联广告] JS脚本类
Aug 27 Javascript
让回调函数 showResponse 也带上参数的代码
Aug 13 Javascript
jquery ajax return没有返回值的解决方法
Oct 20 Javascript
在浏览器窗口上添加遮罩层的方法
Nov 12 Javascript
JavaScript转换农历类实现及调用方法
Jan 27 Javascript
JQuery实现图片轮播效果
Sep 15 Javascript
JavaScript中 ES6 generator数据类型详解
Aug 11 Javascript
JavaScript中setTimeout的那些事儿
Nov 14 Javascript
微信小程序实现动态显示和隐藏某个控件功能示例
Dec 14 Javascript
@angular前端项目代码优化之构建Api Tree的方法
Dec 24 Javascript
layui多图上传实现删除功能的例子
Sep 23 Javascript
在Vue mounted方法中使用data变量详解
Nov 05 Javascript
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在字符串中查找另一个字符串
2008/11/19 PHP
怎样去阅读一份php源代码
2009/08/21 PHP
php中$_SERVER[PHP_SELF] 和 $_SERVER[SCRIPT_NAME]之间的区别
2009/09/05 PHP
PHP校验ISBN码的函数代码
2011/01/17 PHP
php对数组排序的简单实例
2013/12/25 PHP
PHP中round()函数对浮点数进行四舍五入的方法
2014/11/19 PHP
Laravel5.1 框架响应基本用法实例分析
2020/01/04 PHP
js 禁用浏览器的后退功能的简单方法
2008/12/10 Javascript
简单的js分页脚本
2009/05/21 Javascript
用js实现table单元格高宽调整,兼容合并单元格(兼容IE6、7、8、FF)实例
2013/06/25 Javascript
js关闭浏览器窗口及检查浏览器关闭事件
2013/09/03 Javascript
JQUERY dialog的用法详细解析
2013/12/19 Javascript
jQuery使用CSS()方法给指定元素同时设置多个样式
2015/03/26 Javascript
JavaScript中的toLocaleLowerCase()方法使用详解
2015/06/06 Javascript
浅谈JavaScript中运算符的优先级
2015/07/07 Javascript
JavaScript简单实现鼠标移动切换图片的方法
2016/02/23 Javascript
Angular.JS判断复选框checkbox是否选中并实时显示
2016/11/30 Javascript
vue 2.0项目中如何引入element-ui详解
2017/09/06 Javascript
傻瓜式vuex语法糖kiss-vuex整理
2018/12/21 Javascript
使用JavaScript通过前端发送电子邮件
2020/05/22 Javascript
Windows安装Python、pip、easy_install的方法
2017/03/05 Python
python:print格式化输出到文件的实例
2018/05/14 Python
Python 生成 -1~1 之间的随机数矩阵方法
2018/08/04 Python
10分钟教你用Python实现微信自动回复功能
2018/11/28 Python
python+pyqt5实现24点小游戏
2019/01/24 Python
Python3.5迭代器与生成器用法实例分析
2019/04/30 Python
一文了解Python并发编程的工程实现方法
2019/05/31 Python
Django model update的多种用法介绍
2020/03/28 Python
python随机生成库faker库api实例详解
2019/11/28 Python
日本网路线上商品代购服务:转送JAPAN
2016/08/05 全球购物
THE OUTNET美国官网:国际设计师品牌折扣网站
2017/03/07 全球购物
Stio官网:男女、儿童户外服装
2019/12/13 全球购物
运动会广播稿60字
2014/01/15 职场文书
省三好学生申请材料
2014/01/22 职场文书
仓库保管员岗位职责
2015/02/09 职场文书
Win11远程连接不上怎么办?Win11远程桌面用不了的解决方法
2022/08/05 数码科技