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 相关文章推荐
让插入到 innerHTML 中的 script 跑起来的实现代码
Jul 01 Javascript
jquery ajax 检测用户注册时用户名是否存在
Nov 03 Javascript
javascript学习笔记(七)利用javascript来创建和存储cookie
Apr 08 Javascript
JS获取URL中的参数数据
Dec 05 Javascript
省市二级联动小案例讲解
Jul 24 Javascript
Angular 中 select指令用法详解
Sep 29 Javascript
js自制图片放大镜功能
Jan 24 Javascript
详解如何在vue项目中使用lodop打印插件
Sep 27 Javascript
Vue框架TypeScript装饰器使用指南小结
Feb 18 Javascript
Vue动态组件和异步组件原理详解
May 06 Javascript
微信小程序 select 下拉框组件功能
Sep 09 Javascript
nuxt引入组件和公共样式的操作
Nov 05 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+APACHE实现用户论证的方法
2006/10/09 PHP
PHP捕获Fatal error错误的方法
2014/06/11 PHP
PHP APC配置文件2套和参数详解
2014/06/11 PHP
Zend Framework缓存Cache用法简单实例
2016/03/19 PHP
ASP中用Join和Array,可以加快字符连接速度的代码
2007/08/22 Javascript
jQuery学习5 jQuery事件模型
2010/02/07 Javascript
jquery下实现overlay遮罩层代码
2010/08/25 Javascript
js用正则表达式来验证表单(比较齐全的资源)
2013/11/17 Javascript
jQuery中的read和JavaScript中的onload函数的区别
2014/08/27 Javascript
javascript给span标签赋值的方法
2015/11/26 Javascript
javascript的理解及经典案例分析
2016/05/20 Javascript
AngularJS的ng-click传参的方法
2017/06/19 Javascript
基于js 本地存储(详解)
2017/08/16 Javascript
解决antd 表单设置默认值initialValue后验证失效的问题
2020/11/02 Javascript
python实现网页链接提取的方法分享
2014/02/25 Python
Python创建系统目录的方法
2015/03/11 Python
python中根据字符串调用函数的实现方法
2016/06/12 Python
Python基于回溯法子集树模板实现图的遍历功能示例
2017/09/05 Python
Django+JS 实现点击头像即可更改头像的方法示例
2018/12/26 Python
python格式化输出保留2位小数的实现方法
2019/07/02 Python
Python 多线程,threading模块,创建子线程的两种方式示例
2019/09/29 Python
Tensorflow 实现将图像与标签数据转化为tfRecord文件
2020/02/17 Python
详解Pycharm安装及Django安装配置指南
2020/09/15 Python
安装并免费使用Pycharm专业版(学生/教师)
2020/09/24 Python
美国存储和组织商店:The Container Store
2017/08/16 全球购物
SHEIN美国:购买时髦的女性服装
2020/12/02 全球购物
后勤人员自我鉴定
2013/10/20 职场文书
环境工程求职简历的自我评价范文
2013/10/24 职场文书
工作自我评价怎么写
2014/01/29 职场文书
教师学习培训邀请函
2014/02/04 职场文书
护理人员的自我评价分享
2014/03/15 职场文书
大学生党员承诺书
2014/05/20 职场文书
社区服务标语
2014/07/01 职场文书
幽默自我介绍演讲稿
2014/08/21 职场文书
关于环保的活动方案
2014/08/25 职场文书
交通事故和解协议书
2014/09/25 职场文书