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 相关文章推荐
jquery 框架使用教程 AJAX篇
Oct 11 Javascript
JQuery下关于$.Ready()的分析
Dec 13 Javascript
js操作ajax返回的json的注意问题!
Feb 23 Javascript
JS获取页面窗口大小的代码解读
Dec 01 Javascript
手机号码,密码正则验证
Sep 04 Javascript
jQuery实现的个性化返回底部与返回顶部特效代码
Oct 30 Javascript
jquery动画效果学习笔记(8种效果)
Nov 13 Javascript
详解Node.js模块间共享数据库连接的方法
May 24 Javascript
JS HTML图片显示Canvas 压缩功能
Jul 21 Javascript
基于canvas粒子系统的构建详解
Aug 31 Javascript
ES6扩展运算符用法实例分析
Oct 31 Javascript
代码块高亮可复制显示js插件highlight.js+clipboard.js整合
Feb 15 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
Http 1.1 Etag 与 Last-Modified提高php效率
2008/01/10 PHP
yii中widget的用法
2014/12/03 PHP
PHP打印输出函数汇总
2016/08/28 PHP
浅谈php fopen下载远程文件的函数
2016/11/18 PHP
说说掌握JavaScript语言的思想前提想学习js的朋友可以看看
2009/04/01 Javascript
javascript removeChild 使用注意事项
2009/04/11 Javascript
jQuery 瀑布流 浮动布局(一)(延迟AJAX加载图片)
2012/05/23 Javascript
HTML复选框和单选框 checkbox和radio事件介绍
2012/12/12 Javascript
js中哈希表的几种用法总结
2014/01/28 Javascript
JS判断字符串长度的5个方法(区分中文和英文)
2014/03/18 Javascript
js实现当复选框选择匿名登录时隐藏登录框效果
2015/08/14 Javascript
javascript日期格式化方法汇总
2015/10/04 Javascript
轻松实现javascript数据双向绑定
2015/11/11 Javascript
AngularJS 遇到的小坑与技巧小结
2016/06/07 Javascript
jquery计算出left和top,让一个div水平垂直居中的简单实例
2016/07/13 Javascript
jQuery progressbar通过Ajax请求实现后台进度实时功能
2016/10/11 Javascript
基于Particles.js制作超炫粒子动态背景效果(仿知乎)
2017/09/13 Javascript
js根据需要计算数组中重复出现某个元素的个数
2019/01/18 Javascript
微信小程序tabBar 返回tabBar不刷新页面
2019/07/25 Javascript
js实现简单的打印表格
2020/01/15 Javascript
JavaScript Blob对象原理及用法详解
2020/10/14 Javascript
JavaScript实现京东快递单号查询
2020/11/30 Javascript
python根据京东商品url获取产品价格
2015/08/09 Python
pandas中apply和transform方法的性能比较及区别介绍
2018/10/30 Python
Python/Django后端使用PIL Image生成头像缩略图
2019/04/30 Python
Python tkinter模版代码实例
2020/02/05 Python
python加密解密库cryptography使用openSSL生成的密匙加密解密
2020/02/11 Python
keras中的loss、optimizer、metrics用法
2020/06/15 Python
高考考python编程是真的吗
2020/07/20 Python
介绍一下JMS编程步骤
2015/09/22 面试题
快餐店的创业计划书范文
2014/01/29 职场文书
请假条标准格式规范
2014/04/10 职场文书
2016中学教师读书心得体会
2016/01/13 职场文书
银行工作心得体会范文
2016/01/23 职场文书
css3中transform属性实现的4种功能
2021/08/07 HTML / CSS
Zabbix对Kafka topic积压数据监控的解决方案
2022/07/07 Servers