Javascript中的arguments与重载介绍


Posted in Javascript onMarch 15, 2015

因为语言上的设计错误,arguments可以被当成一个数组。

function zero () {

    console.log(arguments[0]);

}

也会有
function zero () {

  for(var i=0;i<arguments.length;i++){

     console.log(arguments[i]);

  }

}

它利用了Javascript的一个事实,即Javasc

而这里的arguments变量给实参提供了一个类似数组的接口。因为这里的arguments的可变参数,我们可以利用这个有意思的东西来做一些有意思的事,比如重载。

Javscript 重载

stackvoerflow上有一个关于重载的问题,于是有了第一个答案

if (typeof friend === "undefined") {
} else {
}

还有一个答案则是

switch (arguments.length) {

case 0:

    //Probably error

    break;

case 1:

    //Do something

    break;

case 2:

default: //Fall through to handle case of more parameters

    //Do something else

    break;

}

只是这种方式真的不好看,难道我们的函数最后要变成这样子的?

function zero1 (){

    console.log('arguments 1')

};

function zero2 (){

    console.log('arguments 2')

};

function zero () {

  if(arguments.length == 1){

    zero1();

  } else{

    zero2();

  }

}

真的一点都不好看,即使我们换个switch..case,也不好看啊。

Javascript arguments不是一个数组

arguments不是向我们看到的那样一直是一个数组,有时候可能不是。

function hello(){ 

    console.log(typeof arguments);

}

这里arguments的类型是一个对象,虽然数组的类型也是一个对象,虽然我们可以将之转换为一个数组
var args = Array.prototype.slice.call(arguments);

但是这也表明了这不是一个数组,它拥有的只有Array的唯一一个属性,即length。除此还有

arguments.callee

Reference to the currently executing function.

arguments.caller

Reference to the function that invoked the currently executing function.

arguments.length

Reference to the number of arguments passed to the function.

Javascript 相关文章推荐
表单的一些基本用法与技巧
Jul 15 Javascript
仅IE不支持setTimeout/setInterval函数的第三个以上参数
May 25 Javascript
JS实现根据当前文字选择返回被选中的文字
May 21 Javascript
Javascript 实现图片无缝滚动
Dec 19 Javascript
jQuery仿Flash上下翻动的中英文导航菜单实例
Mar 10 Javascript
JavaScript用构造函数如何获取变量的类型名
Dec 23 Javascript
Vue2.0实现将页面中表格数据导出excel的实例
Aug 09 Javascript
ajax+node+request爬取网络图片的实例(宅男福利)
Aug 28 Javascript
fullpage.js最后一屏滚动方式
Feb 06 Javascript
微信小程序车牌号码模拟键盘输入功能的实现代码
Nov 11 Javascript
如何进行微信公众号开发的本地调试的方法
Jun 16 Javascript
Vue实现数据表格合并列rowspan效果
Nov 30 Javascript
JavaScript中的闭包介绍
Mar 15 #Javascript
Javascript中的匿名函数与封装介绍
Mar 15 #Javascript
Javascript中的方法链(Method Chaining)介绍
Mar 15 #Javascript
Javascript中的apply()方法浅析
Mar 15 #Javascript
Javascript中的Callback方法浅析
Mar 15 #Javascript
Javascript中的call()方法介绍
Mar 15 #Javascript
Javascript中的高阶函数介绍
Mar 15 #Javascript
You might like
封装一个PDO数据库操作类代码
2009/09/09 PHP
linux下为php添加curl扩展的方法
2011/07/29 PHP
php中一个有意思的日期逻辑处理
2012/03/25 PHP
PHP中使用mktime获取时间戳的一个黑色幽默分析
2012/05/31 PHP
PHP把空格、换行符、中文逗号等替换成英文逗号的正则表达式
2014/05/04 PHP
基于PHP的简单采集数据入库程序【续篇】
2014/07/30 PHP
PHP学习笔记(二):变量详解
2015/04/17 PHP
Zend Framework开发入门经典教程
2016/03/23 PHP
thinkphp跨库操作的简单代码实例
2016/09/22 PHP
Lumen timezone 时区设置方法(慢了8个小时)
2018/01/20 PHP
关于flash遮盖div浮动层的解决方法
2010/07/17 Javascript
javascript实现的使用方向键控制光标在table单元格中切换
2010/11/17 Javascript
关于js获取radio和select的属性并控制的代码
2011/05/12 Javascript
ParseInt函数参数设置介绍
2014/01/02 Javascript
在jquery boxy中添加百度地图坐标拾取注意流程
2014/04/03 Javascript
jquery获取一个元素下面相同子元素的个数代码
2014/07/31 Javascript
获取当前月(季度/年)的最后一天(set相关操作及应用)
2016/12/27 Javascript
写一个移动端惯性滑动&amp;回弹Vue导航栏组件 ly-tab
2018/03/06 Javascript
vue.js的双向数据绑定Object.defineProperty方法的神奇之处
2019/01/18 Javascript
用Vue编写抽象组件的方法
2019/05/06 Javascript
javascript创建元素和删除元素实例小结
2019/06/19 Javascript
python基础教程之序列详解
2014/08/29 Python
详解Python验证码识别
2016/01/25 Python
Python基于list的append和pop方法实现堆栈与队列功能示例
2017/07/24 Python
Python实现的选择排序算法原理与用法实例分析
2017/11/22 Python
详解如何在python中读写和存储matlab的数据文件(*.mat)
2018/02/24 Python
Python检测网络延迟的代码
2018/05/15 Python
详解利用Python scipy.signal.filtfilt() 实现信号滤波
2019/06/05 Python
python爬虫 线程池创建并获取文件代码实例
2019/09/28 Python
python多进程 主进程和子进程间共享和不共享全局变量实例
2020/04/25 Python
一款纯css3制作的2015年元旦雪人动画特效教程
2014/12/29 HTML / CSS
详解html5 canvas 微信海报分享(个人爬坑)
2018/01/12 HTML / CSS
佛罗里达州印第安河新鲜水果:Hale Groves
2017/02/20 全球购物
Aosom西班牙:家具在线商店
2020/06/11 全球购物
护理专业求职信
2014/06/15 职场文书
教师党员整改措施
2014/10/24 职场文书