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 相关文章推荐
JS控件autocomplete 0.11演示及下载 1月5日已更新
Jan 09 Javascript
asp 的 分词实现代码
May 24 Javascript
CSS+Table图文混排中实现文本自适应图片宽度(超简单+跨所有浏览器)
Feb 14 Javascript
基于jquery的给文章加入关键字链接
Oct 26 Javascript
javascript简单实现命名空间效果
Mar 06 Javascript
javascript写的一个模拟阅读小说的程序
Apr 04 Javascript
jQuery中children()方法用法实例
Jan 07 Javascript
jquery实现浮动的侧栏实例
Jun 25 Javascript
极力推荐10个短小实用的JavaScript代码段
Aug 03 Javascript
微信小程序 登录实例详解
Jan 16 Javascript
Vue中使用方法、计算属性或观察者的方法实例详解
Oct 31 Javascript
javascript随机变色实例代码
Oct 15 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设置一边执行一边输出结果的代码
2013/09/30 PHP
php中debug_backtrace、debug_print_backtrace和匿名函数用法实例
2014/12/01 PHP
centos 7.2下搭建LNMP环境教程
2016/11/20 PHP
PHP弱类型语言中类型判断操作实例详解
2017/08/10 PHP
PHP框架实现WebSocket在线聊天通讯系统
2019/11/21 PHP
jQuery 翻牌或百叶窗效果(内容三秒自动切换)
2012/06/14 Javascript
基于jquery的用鼠标画出可移动的div
2012/09/06 Javascript
顶部缓冲下拉菜单导航特效的JS代码
2013/08/27 Javascript
js获取窗口相对于屏幕左边和上边的位置坐标
2014/05/15 Javascript
Node.js node-schedule定时任务隔多少分钟执行一次的方法
2015/02/10 Javascript
JQuery动态添加和删除表格行的方法
2015/03/09 Javascript
jquery预加载图片的方法
2015/05/27 Javascript
vue.js实现表格合并示例代码
2016/11/30 Javascript
纯JS单页面赛车游戏制作代码分享
2017/03/03 Javascript
基于Vue实现后台系统权限控制的示例代码
2017/08/29 Javascript
three.js 入门案例详解
2018/01/23 Javascript
微信小程序中使用ECharts 异步加载数据的方法
2018/06/27 Javascript
ES6中let 和 const 的新特性
2018/09/03 Javascript
微信小程序实现卡片层叠滑动效果
2019/06/21 Javascript
微信小程序-可移动菜单的实现过程详解
2019/06/24 Javascript
使用 webpack 插件自动生成 vue 路由文件的方法
2019/08/20 Javascript
JQuery常用简单动画操作方法回顾与总结
2019/12/07 jQuery
用smtplib和email封装python发送邮件模块类分享
2014/02/17 Python
Python多进程库multiprocessing中进程池Pool类的使用详解
2017/11/24 Python
django利用request id便于定位及给日志加上request_id
2018/08/26 Python
python实现简单flappy bird
2018/12/24 Python
Python一键查找iOS项目中未使用的图片、音频、视频资源
2019/08/12 Python
基于Python实现下载网易音乐代码实例
2020/08/10 Python
python中strip(),lstrip(),rstrip()函数的使用讲解
2020/11/17 Python
LA MER海蓝之谜美国官网:传奇面霜
2016/08/27 全球购物
《雾凇》教学反思
2014/02/17 职场文书
《狼》教学反思
2014/03/02 职场文书
慈善晚会策划方案
2014/05/14 职场文书
2014年幼儿园国庆主题活动方案
2014/09/16 职场文书
吴仁宝观后感
2015/06/09 职场文书
2015年国庆节新闻稿
2015/07/18 职场文书