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 相关文章推荐
javascript学习笔记(七)利用javascript来创建和存储cookie
Apr 08 Javascript
JavaScript中的ArrayBuffer详细介绍
Dec 08 Javascript
原生javascript实现自动更新的时间日期
Feb 12 Javascript
学习使用Bootstrap输入框、导航、分页等常用组件
May 11 Javascript
JS实现微信里判断页面是否被分享成功的方法
Jun 06 Javascript
angular使用bootstrap方法手动启动的实例代码
Jul 18 Javascript
详解react服务端渲染(同构)的方法
Sep 21 Javascript
angular中不同的组件间传值与通信的方法
Nov 04 Javascript
Angular中点击li标签实现更改颜色的核心代码
Dec 08 Javascript
vue2.0 computed 计算list循环后累加值的实例
Mar 07 Javascript
vue使用svg文件补充-svg放大缩小操作(使用d3.js)
Sep 22 Javascript
javascript进阶篇深拷贝实现的四种方式
Jul 07 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中的Class的几点个人看法
2006/10/09 PHP
php实现读取和写入tab分割的文件
2015/06/01 PHP
分享php分页的功能模块
2015/06/16 PHP
盘点PHP和ASP.NET的10大对比!
2015/12/24 PHP
thinkPHP简单遍历数组方法分析
2016/05/16 PHP
为Plesk PHP7启用Oracle OCI8扩展方法总结
2019/03/29 PHP
javascript nextSibling 与 getNextElement(node) 使用介绍
2011/10/13 Javascript
js 判断js函数、变量是否存在的简单示例代码
2014/03/04 Javascript
JS解析XML实例分析
2015/01/30 Javascript
Lab.js初次使用笔记
2015/02/28 Javascript
JS框架之vue.js(深入三:组件1)
2016/09/29 Javascript
JS限定手机版中图片大小随分辨率自动调整的方法
2016/12/05 Javascript
微信小程序访问node.js接口服务器搭建教程
2017/04/25 Javascript
旺旺在线客服代码 旺旺客服代码生成器
2018/01/09 Javascript
微信小程序使用form表单获取输入框数据的实例代码
2018/05/17 Javascript
JS实现移动端触屏拖拽功能
2018/07/31 Javascript
axios全局注册,设置token,以及全局设置url请求网段的方法
2018/09/25 Javascript
手把手带你搭建一个node cli的方法示例
2020/08/07 Javascript
利用JS判断元素是否为数组的方法示例
2021/01/08 Javascript
[03:42]2016国际邀请赛中国区预选赛首日现场玩家采访
2016/06/26 DOTA
[02:02]特效爆炸!DOTA2珍宝之瓶待你开启
2018/08/21 DOTA
[02:50]【扭转乾坤,只此一招】DOTA2永雾林渊版本开启新篇章
2020/12/22 DOTA
Python比较文件夹比另一同名文件夹多出的文件并复制出来的方法
2015/03/05 Python
Python中用于计算对数的log()方法
2015/05/15 Python
python 实时遍历日志文件
2016/04/12 Python
Python3.5内置模块之time与datetime模块用法实例分析
2019/04/27 Python
使用pandas 将DataFrame转化成dict
2019/12/10 Python
python生成大写32位uuid代码
2020/03/03 Python
阿里巴巴的Oracle DBA笔试题答案-SQL tuning类
2016/04/03 面试题
中职三好学生事迹材料
2014/08/24 职场文书
收入证明范本
2015/06/12 职场文书
2020年个人安全保证书参考模板
2020/01/08 职场文书
利用前端HTML+CSS+JS开发简单的TODOLIST功能(记事本)
2021/04/13 Javascript
详解CSS故障艺术
2021/05/25 HTML / CSS
用React Native制作一个简单的游戏引擎
2021/05/27 Javascript
vue3使用vuedraggable实现拖拽功能
2022/04/06 Vue.js