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 相关文章推荐
详解new function(){}和function(){}() 区别分析
Mar 22 Javascript
将input file的选择的文件清空的两种解决方案
Oct 21 Javascript
js控制表单不能输入空格的小例子
Nov 20 Javascript
简介JavaScript中的setTime()方法的使用
Jun 11 Javascript
jquery实现简单实用的弹出层效果代码
Oct 15 Javascript
微信小程序 仿美团分类菜单 swiper分类菜单
Apr 12 Javascript
鼠标拖动改变DIV等网页元素的大小的实现方法
Jul 06 Javascript
JS实现的自定义map方法示例
May 17 Javascript
送你43道JS面试题(收藏)
Jun 17 Javascript
Node.js API详解之 querystring用法实例分析
Apr 29 Javascript
详解vue-router的Import异步加载模块问题的解决方案
May 13 Javascript
原生JS封装拖动验证滑块的实现代码示例
Jun 01 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判断正常访问和外部访问的示例
2014/02/10 PHP
PHP 返回13位时间戳的实现代码
2016/05/13 PHP
基于jquery的弹出提示框始终处于窗口的居中位置(类似于alert弹出框的效果)
2011/09/28 Javascript
jqueyr判断checkbox组的选中(示例代码)
2013/11/08 Javascript
解析JavaScript中的不可见数据类型
2013/12/02 Javascript
Node.js node-schedule定时任务隔多少分钟执行一次的方法
2015/02/10 Javascript
整理Javascript事件响应学习笔记
2015/12/02 Javascript
javascript三种代码注释方法
2016/06/02 Javascript
jQuery 更改checkbox的状态,无效的解决方法
2016/07/22 Javascript
jQuery上传多张图片带进度条样式(DEMO)
2017/03/02 Javascript
浅谈箭头函数写法在ReactJs中的使用
2017/08/22 Javascript
AngularJS使用$http配置对象方式与服务端交互方法
2018/08/13 Javascript
vue2使用keep-alive缓存多层列表页的方法
2018/09/21 Javascript
Vue3 源码导读(推荐)
2019/10/14 Javascript
jquery 键盘事件 keypress() keydown() keyup()用法总结
2019/10/23 jQuery
Vue使用预渲染代替SSR的方法
2020/07/02 Javascript
JS实现audio音频剪裁剪切复制播放与上传(步骤详解)
2020/07/28 Javascript
Python使用微信SDK实现的微信支付功能示例
2017/06/30 Python
Pycharm2017版本设置启动时默认自动打开项目的方法
2018/10/29 Python
在Mac下使用python实现简单的目录树展示方法
2018/11/01 Python
详解Python进阶之切片的误区与高级用法
2018/12/24 Python
postman模拟访问具有Session的post请求方法
2019/07/15 Python
python selenium 执行完毕关闭chromedriver进程示例
2019/11/15 Python
详解python常用命令行选项与环境变量
2020/02/20 Python
python开发实例之Python的Twisted框架中Deferred对象的详细用法与实例
2020/03/19 Python
Python实现查找数据库最接近的数据
2020/06/08 Python
Python 如何在字符串中插入变量
2020/08/01 Python
HTML5+CSS3绘制锯齿状的矩形
2016/03/01 HTML / CSS
HTML5中在title标题标签里设置小图标的方法
2020/06/23 HTML / CSS
建筑班组长岗位职责
2014/01/02 职场文书
敬老院活动总结
2014/04/28 职场文书
团党委领导干部党的群众路线教育实践活动个人对照检查材料思想汇
2014/10/05 职场文书
2014年科研工作总结
2014/12/03 职场文书
专家推荐信范文
2015/03/26 职场文书
李强优秀员工观后感
2015/06/16 职场文书
分享几种python 变量合并方法
2022/03/20 Python