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 表单验证大全
Nov 23 Javascript
jQuery中.live()方法的用法深入解析
Dec 30 Javascript
jquery动态添加option示例
Dec 30 Javascript
JavaScript中实现sprintf、printf函数
Jan 27 Javascript
jQuery实现自定义checkbox和radio样式
Jul 13 Javascript
javascript日期处理函数,性能优化批处理
Sep 06 Javascript
JS实现左右无缝轮播图代码
May 01 Javascript
JS获取IMG图片高宽的简单实例
May 17 Javascript
jQuery插件ImgAreaSelect实现头像上传预览和裁剪功能实例讲解一
May 26 jQuery
PHP7新特性简述
Jun 11 Javascript
JScript实现表格的简单操作
Aug 15 Javascript
express.js中间件说明详解
Mar 19 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.MVC的模板标签系统(五)
2006/09/05 PHP
fgetcvs在linux的问题
2012/01/15 PHP
javascript拓展DOM操作 prependChild insertAfert
2010/11/17 Javascript
jquery简单瀑布流实现原理及ie8下测试代码
2013/01/23 Javascript
一个支付页面DEMO附截图
2014/07/22 Javascript
node.js中的fs.close方法使用说明
2014/12/17 Javascript
NodeJS学习笔记之(Url,QueryString,Path)模块
2015/01/13 NodeJs
js实现从中间开始往上下展开网页窗口的方法
2015/03/02 Javascript
javascript原型模式用法实例详解
2015/06/04 Javascript
jquery实现Slide Out Navigation滑出式菜单效果代码
2015/09/07 Javascript
jQuery实现仿微软首页感应鼠标变化滑动窗口效果
2015/10/08 Javascript
jquery实现图片预加载
2015/12/25 Javascript
微信小程序 wx.uploadFile无法上传解决办法
2016/12/14 Javascript
JS基于正则表达式的替换操作(replace)用法示例
2017/04/28 Javascript
ReactNative之键盘Keyboard的弹出与消失示例
2017/07/11 Javascript
JQuery用$.ajax或$.getJSON跨域获取JSON数据的实现代码
2017/09/23 jQuery
layer实现关闭弹出层刷新父界面功能详解
2017/11/15 Javascript
轻松搞定jQuery+JSONP跨域请求的解决方案
2018/03/06 jQuery
浅析java线程中断的办法
2018/07/29 Javascript
详解ES6 Symbol 的用途
2018/10/14 Javascript
[04:49]期待西雅图之战 2016国际邀请赛中国区预选赛WINGS战队赛后采访
2016/06/29 DOTA
[01:00] DOTA2英雄背景故事第五期之重力引力法则谜团
2020/07/16 DOTA
[45:25]完美世界DOTA2联赛循环赛 PXG vs IO 第一场 11.06
2020/11/09 DOTA
python 多进程通信模块的简单实现
2014/02/20 Python
python实现判断数组是否包含指定元素的方法
2015/07/15 Python
浅谈python中的__init__、__new__和__call__方法
2017/07/18 Python
python 中值滤波,椒盐去噪,图片增强实例
2019/12/18 Python
python实现电子词典
2020/03/03 Python
瑞贝卡·泰勒官方网站:Rebecca Taylor
2016/09/24 全球购物
求职简历的自我评价
2014/01/31 职场文书
开展党的群众路线教育实践活动方案
2014/02/05 职场文书
个人对照检查材料思想汇报(四风问题)
2014/09/25 职场文书
助学金感谢信
2015/01/20 职场文书
MySQL基于索引的压力测试的实现
2021/11/07 MySQL
「玫瑰之王的葬礼」舞台剧主视觉图公开
2022/03/21 日漫
Python使用pandas导入csv文件内容的示例代码
2022/12/24 Python