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 相关文章推荐
分享一个asp.net pager分页控件
Jan 04 Javascript
推荐40个简单的 jQuery 导航插件和教程(下篇)
Sep 14 Javascript
js关闭当前页面(窗口)的几种方式总结
Mar 05 Javascript
jquery.validate的使用说明介绍
Nov 12 Javascript
input链接页面、打开新网页等等的具体实现
Dec 30 Javascript
使用Ajax与服务器(JSON)通信实例
Nov 04 Javascript
移动端脚本框架Hammer.js
Dec 15 Javascript
bootstrap里bootstrap动态加载下拉框的实例讲解
Aug 10 Javascript
原生js+ajax分页组件
Jan 30 Javascript
序列化模块json代码实例详解
Mar 03 Javascript
详解微信小程序「渲染层网络层错误」的解决方法
Jan 06 Javascript
详解TS数字分隔符和更严格的类属性检查
May 06 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+JQuery+Ajax实现分页方法详解
2016/08/06 PHP
jquery 1.3.2 IE8中的一点点的小问题解决方法
2009/07/10 Javascript
JavaScript 加号(+)运算符号
2009/12/06 Javascript
浅说js变量
2011/05/25 Javascript
什么是DOM(Document Object Model)文档对象模型
2012/03/05 Javascript
js获取本机的外网/广域网ip地址完整源码
2013/08/12 Javascript
JavaScript数组深拷贝和浅拷贝的两种方法
2014/04/16 Javascript
JavaScript设计模式之抽象工厂模式介绍
2014/12/28 Javascript
每天一篇javascript学习小结(属性定义方法)
2015/11/19 Javascript
JS组件中bootstrap multiselect两大组件较量
2016/01/26 Javascript
Javascript实现的SHA-256加密算法完整实例
2016/02/02 Javascript
轻松掌握JavaScript享元模式
2016/08/27 Javascript
Angularjs 创建可复用组件实例代码
2016/10/09 Javascript
React Native 使用Fetch发送网络请求的示例代码
2017/12/02 Javascript
require.js 加载过程与使用方法介绍
2018/10/30 Javascript
Vue多组件仓库开发与发布详解
2019/02/28 Javascript
js尾调用优化的实现
2019/05/23 Javascript
JavaScript获取页面元素的常用方法详解
2019/09/28 Javascript
构建Vue大型应用的10个最佳实践(小结)
2019/11/07 Javascript
Vue页面刷新记住页面状态的实现
2019/12/27 Javascript
小谈angular ng deploy的实现
2020/04/07 Javascript
[02:43]2014DOTA2国际邀请赛 官方Alliance战队纪录片
2014/07/14 DOTA
django 发送手机验证码的示例代码
2018/04/25 Python
python numpy和list查询其中某个数的个数及定位方法
2018/06/27 Python
Python3匿名函数用法示例
2018/07/25 Python
python利用Tesseract识别验证码的方法示例
2019/01/21 Python
500行Python代码打造刷脸考勤系统
2019/06/03 Python
python中比较两个列表的实例方法
2019/07/04 Python
Python3 获取文件属性的方式(时间、大小等)
2020/03/12 Python
应用英语专业自荐信
2014/01/26 职场文书
优秀社区干部事迹材料
2014/02/03 职场文书
工作评语大全
2014/04/26 职场文书
大学生学习面向未来的赶考思想汇报
2014/09/12 职场文书
2015年大学生暑期实习报告
2015/07/13 职场文书
漫画「日和酱的要求是绝对的」第3卷封面公开
2022/03/21 日漫
SQL CASE 表达式的具体使用
2022/03/21 SQL Server