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本身的局限性 别让javascript做太多事
Mar 23 Javascript
jquery 图片轮换效果
Jul 29 Javascript
原生JavaScript实现动态省市县三级联动下拉框菜单实例代码
Feb 03 Javascript
简单的jQuery banner图片轮播实例代码
Mar 04 Javascript
Node.js和Express简单入门介绍
Mar 24 Javascript
jQuery实现checkbox全选功能完整实例
Jul 12 jQuery
axios简单实现小程序延时loading指示
Jul 30 Javascript
深入浅出理解JavaScript闭包的功能与用法
Aug 01 Javascript
vue-router权限控制(简单方式)
Oct 29 Javascript
示例vue 的keep-alive缓存功能的实现
Dec 13 Javascript
jquery实现的分页显示功能示例
Aug 23 jQuery
Element-ui upload上传文件限制的解决方法
Jan 22 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中文汉字验证码
2007/04/08 PHP
php strlen mb_strlen计算中英文混排字符串长度
2009/07/10 PHP
php使用pdo连接mssql server数据库实例
2014/12/25 PHP
PHP+MySQL实现无极限分类栏目的方法
2015/12/23 PHP
JavaScript 学习笔记一些小技巧
2010/03/28 Javascript
jquery实现ajax提交form表单的方法总结
2014/03/03 Javascript
用js格式化金额可设置保留的小数位数
2014/05/09 Javascript
javascript手风琴下拉菜单实现代码
2015/11/12 Javascript
js正则表达式验证邮件地址
2015/11/12 Javascript
AngularJS教程 ng-style 指令简单示例
2016/08/03 Javascript
jQuery实现表格奇偶行显示不同背景色 就这么简单
2017/03/13 Javascript
详解Webpack多环境代码打包的方法
2018/08/03 Javascript
Node.js JSON模块用法实例分析
2019/01/04 Javascript
详解vue中this.$emit()的返回值是什么
2019/04/07 Javascript
Layui数据表格判断编辑输入的值,是否为我需要的类型详解
2019/10/26 Javascript
vuex的数据渲染与修改浅析
2020/11/26 Vue.js
开源Web应用框架Django图文教程
2017/03/09 Python
python 爬虫出现403禁止访问错误详解
2017/03/11 Python
简述:我为什么选择Python而不是Matlab和R语言
2017/11/14 Python
python实现人脸识别经典算法(一) 特征脸法
2018/03/13 Python
python实现五子棋小游戏
2020/03/25 Python
Python 给屏幕打印信息加上颜色的实现方法
2019/04/24 Python
对python tkinter窗口弹出置顶的方法详解
2019/06/14 Python
FFT快速傅里叶变换的python实现过程解析
2019/10/21 Python
使用Pytorch来拟合函数方式
2020/01/14 Python
Python3 assert断言实现原理解析
2020/03/02 Python
贝玲妃美国官方网站:Benefit美国
2016/08/28 全球购物
斯洛伐克电子产品购物网站:DATART
2020/04/05 全球购物
实习护士自我鉴定
2013/10/13 职场文书
机械专业技术员求职信
2014/06/14 职场文书
2014年护士工作总结范文
2014/11/11 职场文书
2014年科普工作总结
2014/12/06 职场文书
收费员岗位职责
2015/02/14 职场文书
校园新闻稿范文
2015/07/18 职场文书
python爬虫之selenium库的安装及使用教程
2021/05/23 Python
python程序的组织结构详解
2021/12/06 Python