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 相关文章推荐
表单填写时用回车代替TAB的实现方法
Oct 09 Javascript
JSChart轻量级图形报表工具(内置函数中文参考)
Oct 11 Javascript
js导出table数据到excel即导出为EXCEL文档的方法
Oct 10 Javascript
jquery选择器之内容过滤选择器详解
Jan 27 Javascript
javascript单引号和双引号的区别和处理
May 14 Javascript
Jquery日历插件制作简单日历
Oct 28 Javascript
jquery的ajax提交form表单的两种方法小结(推荐)
May 25 Javascript
js css实现垂直方向自适应的三角提示菜单
Jun 26 Javascript
JS实现添加,替换,删除节点元素的方法
Jun 30 Javascript
vue.js vue-router如何实现无效路由(404)的友好提示
Dec 20 Javascript
快速解决brew安装特定版本flow的问题
May 17 Javascript
Vue中的字符串模板的使用
May 17 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
php实现用已经过去多长时间的方式显示时间
2015/06/05 PHP
PHP编程中的Session阻塞问题与解决方法分析
2017/08/07 PHP
javascript 写类方式之七
2009/07/05 Javascript
js操作select控件的几种方法
2010/06/02 Javascript
自己整理的一个javascript日期处理函数
2010/10/16 Javascript
jQuery EasyUI API 中文文档 - Parser 解析器
2011/09/29 Javascript
Javascript base64编码实现代码
2011/12/02 Javascript
js实现的标题栏新消息闪烁提示效果
2014/06/06 Javascript
js使用正则实现ReplaceAll全部替换的方法
2014/08/22 Javascript
node.js中Socket.IO的进阶使用技巧
2014/11/04 Javascript
js制作带有遮罩弹出层实现登录注册表单特效代码分享
2015/09/05 Javascript
常用javascript表单验证汇总
2020/07/20 Javascript
JavaScript基础篇(3)之Object、Function等引用类型
2015/11/30 Javascript
使用bootstrap typeahead插件实现输入框自动补全之问题及解决办法
2016/07/07 Javascript
jQuery实现微信长按识别二维码功能
2016/08/26 Javascript
微信小程序实现form表单本地储存数据
2019/06/27 Javascript
Vue触发input选取文件点击事件操作
2020/08/07 Javascript
[02:29]DOTA2英雄基础教程 陈
2013/12/17 DOTA
python进阶教程之循环相关函数range、enumerate、zip
2014/08/30 Python
Python中的集合类型知识讲解
2015/08/19 Python
使用Python解析JSON数据的基本方法
2015/10/15 Python
用matplotlib画等高线图详解
2017/12/14 Python
python实现对服务器脚本敏感信息的加密解密功能
2019/08/13 Python
简单了解python shutil模块原理及使用方法
2020/04/28 Python
python 解决selenium 中的 .clear()方法失效问题
2020/09/01 Python
Html5 Geolocation获取地理位置信息实例
2016/12/09 HTML / CSS
用Java语言将一个键盘输入的数字转化成中文输出
2013/01/25 面试题
养殖行业的创业计划书
2014/01/05 职场文书
党员岗位承诺口号大全
2014/03/28 职场文书
授权委托书怎么写
2014/04/03 职场文书
婚前财产公证书
2014/04/10 职场文书
七一讲话心得体会
2014/09/05 职场文书
干部年终考核评语
2015/01/04 职场文书
大学生学期个人总结
2015/02/12 职场文书
2015年公共机构节能宣传周活动总结
2015/03/26 职场文书
教师实习自我鉴定总结
2019/08/20 职场文书