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+iframe 实现无刷新载入整页的代码
Mar 17 Javascript
jquery弹出框的用法示例(一)
Aug 26 Javascript
原生js ActiveXObject获取execl里面的值
Nov 01 Javascript
jquery 页眉单行信息滚动显示实现思路及代码
Jun 26 Javascript
Angularjs制作简单的路由功能demo
Apr 14 Javascript
jQuery中extend函数详解
Jul 13 Javascript
js实现商品抛物线加入购物车特效
Nov 18 Javascript
前端面试知识点锦集(JavaScript篇)
Dec 28 Javascript
基于node.js制作简单爬虫教程
Jun 29 Javascript
Bootstrap 模态对话框只加载一次 remote 数据的完美解决办法
Jul 09 Javascript
Vue项目报错:Uncaught SyntaxError: Unexpected token
Nov 10 Javascript
深入分析jQuery.one() 函数
Jun 03 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下通过POST还是GET来传值
2008/06/05 PHP
php计划任务之ignore_user_abort函数实现方法
2015/01/08 PHP
php需登录的文件上传管理系统
2020/03/21 PHP
window.requestAnimationFrame是什么意思,怎么用
2013/01/13 Javascript
Knockout数组(observable)使用详解示例
2013/11/15 Javascript
JS自调用匿名函数具体实现
2014/02/11 Javascript
简介JavaScript中的setHours()方法的使用
2015/06/11 Javascript
JS+CSS实现自动切换的网页滑动门菜单效果代码
2015/09/14 Javascript
jQuery选择器用法实例详解
2015/12/17 Javascript
JavaScript数组的一些奇葩行为
2016/01/25 Javascript
jQuery针对input的class属性写了多个值情况下的选择方法
2016/06/03 Javascript
JS中数组重排序方法
2016/11/11 Javascript
javascript实现去除HTML标签的方法
2016/12/26 Javascript
微信小程序loading组件显示载入动画用法示例【附源码下载】
2017/12/09 Javascript
浅谈Vue网络请求之interceptors实际应用
2018/02/28 Javascript
跨域请求两种方法 jsonp和cors的实现
2018/11/11 Javascript
vue使用laydate时间插件的方法
2018/11/14 Javascript
vue随机验证码组件的封装实现
2020/02/19 Javascript
详解Python的Django框架中的模版相关知识
2015/07/15 Python
Python利用正则表达式匹配并截取指定子串及去重的方法
2015/07/30 Python
Python中内置数据类型list,tuple,dict,set的区别和用法
2015/12/14 Python
windows10系统中安装python3.x+scrapy教程
2016/11/08 Python
python实现折半查找和归并排序算法
2017/04/14 Python
Python实现基本数据结构中栈的操作示例
2017/12/04 Python
关于python下cv.waitKey无响应的原因及解决方法
2019/01/10 Python
在echarts中图例legend和坐标系grid实现左右布局实例
2020/05/16 Python
Pytorch实现WGAN用于动漫头像生成
2021/03/04 Python
美国百货齐全的精品网站,提供美式风格的产品:Overstock.com
2016/07/22 全球购物
欧舒丹澳洲版:L’OCCITANE
2017/07/17 全球购物
金融专业大学生自我评价
2014/01/09 职场文书
护士求职自荐信范文
2014/03/19 职场文书
邮政竞聘演讲稿
2014/09/03 职场文书
2014年市场部工作总结
2014/11/25 职场文书
医院合作意向书范本
2015/05/08 职场文书
搞笑婚庆主持词
2015/06/29 职场文书
解决golang在import自己的包报错的问题
2021/04/29 Golang