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脚本
Aug 04 Javascript
js setattribute批量设置css样式
Nov 26 Javascript
文本框根据输入内容自适应高度的代码
Oct 24 Javascript
js使用Array.prototype.sort()对数组对象排序的方法
Jan 28 Javascript
Jquery1.9.1源码分析系列(六)延时对象应用之jQuery.ready
Nov 24 Javascript
老生常谈jacascript DOM节点获取
Apr 17 Javascript
原生JS封装animate运动框架的实例
Oct 12 Javascript
解决vue项目刷新后,导航菜单高亮显示的位置不对问题
Nov 01 Javascript
JS数组方法push()、pop()用法实例分析
Jan 18 Javascript
javscript 数组扁平化的实现
Feb 03 Javascript
Vue环境搭建+VSCode+Win10的详细教程
Aug 19 Javascript
JavaScript 声明私有变量的两种方式
Feb 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实现memcache缓存示例讲解
2013/12/04 PHP
PHP采用自定义函数实现遍历目录下所有文件的方法
2014/08/19 PHP
php实现微信和支付宝支付的示例代码
2020/08/11 PHP
laravel入门知识点整理
2020/09/15 PHP
JQuery从头学起第二讲
2010/07/04 Javascript
利用jq让你的div居中的好方法分享
2013/11/21 Javascript
jQuery获得内容和属性示例代码
2014/01/16 Javascript
JavaScript获取css行间样式,内连样式和外链样式的简单方法
2016/07/18 Javascript
详解Vue学习笔记进阶篇之列表过渡及其他
2017/07/17 Javascript
浅谈vue的踩坑路
2017/08/31 Javascript
jQuery实现可兼容IE6的遮罩功能详解
2017/09/19 jQuery
浅谈Node.js 沙箱环境
2018/05/15 Javascript
基于vue中的scoped坑点解说
2020/09/04 Javascript
Js跳出两级循环方法代码实例
2020/09/22 Javascript
python集合类型用法分析
2015/04/08 Python
python使用pygame模块实现坦克大战游戏
2020/03/25 Python
python pandas写入excel文件的方法示例
2019/06/25 Python
Python yield的用法实例分析
2020/03/06 Python
sklearn的predict_proba使用说明
2020/06/28 Python
python 制作python包,封装成可用模块教程
2020/07/13 Python
孕妇内衣和胸罩:Cake Maternity
2018/07/16 全球购物
中国汽车租赁行业头部企业:一嗨租车
2019/05/16 全球购物
英国领先的电动可调床制造商:Laybrook
2019/12/26 全球购物
平面设计岗位职责
2013/12/14 职场文书
人力管理专业毕业生求职信
2014/02/27 职场文书
黄金搭档广告词
2014/03/21 职场文书
《苏珊的帽子》教学反思
2014/04/07 职场文书
安全生产目标责任书
2014/04/14 职场文书
小学校长竞聘演讲稿
2014/05/16 职场文书
销售类求职信
2014/06/13 职场文书
股份合作协议书
2014/09/10 职场文书
领导干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
Nginx代理同域名前后端分离项目的完整步骤
2021/03/31 Servers
利用Python判断你的密码难度等级
2021/06/02 Python
ORACLE数据库应用开发的三十个注意事项
2021/06/07 Oracle
电脑开机弹出documents文件夹怎么回事?弹出documents文件夹解决方法
2022/04/08 数码科技