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 this调用规则说明
Mar 08 Javascript
js冒泡法和数组转换成字符串示例代码
Aug 14 Javascript
javascript常见操作汇总
Sep 03 Javascript
jQuery切换所有复选框选中状态的方法
Jul 02 Javascript
JavaScript的设计模式经典之建造者模式
Feb 24 Javascript
前端框架Vue.js中Directive知识详解
Sep 12 Javascript
jQuery基于ajax方式实现用户名存在性检查功能示例
Feb 10 Javascript
js 转义字符及URI编码详解
Feb 28 Javascript
layer弹出层框架alert与msg详解
Mar 14 Javascript
Bootstrap table学习笔记(2) 前后端分页模糊查询
May 18 Javascript
vue element项目引入icon图标的方法
Jun 06 Javascript
JavaScript字符串转数字的5种方法及遇到的坑
Jul 16 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
实现分十页分向前十页向后十页的处理
2006/10/09 PHP
php打包网站并在线压缩为zip
2016/02/13 PHP
php和nginx交互实例讲解
2019/09/24 PHP
php面试实现反射注入的详细方法
2019/09/30 PHP
phpcmsv9.0任意文件上传漏洞解析
2020/10/20 PHP
网上抓的一个特效
2007/05/11 Javascript
&amp;lt;script defer&amp;gt; defer 是什么意思
2009/05/10 Javascript
asp.net下利用js实现返回上一页的实现方法小集
2009/11/24 Javascript
JavaScript自动设置IFrame高度的小例子
2013/06/08 Javascript
JS数组的赋值介绍
2014/03/10 Javascript
jquery实现的仿天猫侧导航tab切换效果
2015/08/24 Javascript
react系列从零开始_简单谈谈react
2017/07/06 Javascript
Vue路由前后端设计总结
2019/08/06 Javascript
webpack4 配置 ssr 环境遇到“document is not defined”
2019/10/24 Javascript
vue 内联样式style中的background用法说明
2020/08/05 Javascript
浅谈vue 多个变量同时赋相同值互相影响
2020/08/05 Javascript
[31:01]2014 DOTA2国际邀请赛中国区预选赛5.21 CNB VS Orenda
2014/05/23 DOTA
[06:44]2014DOTA2国际邀请赛-钥匙体育馆开战 开幕式振奋人心
2014/07/19 DOTA
python 字典(dict)按键和值排序
2016/06/28 Python
python 读取txt,json和hdf5文件的实例
2018/06/05 Python
Python多进程与服务器并发原理及用法实例分析
2018/08/21 Python
python函数与方法的区别总结
2019/06/23 Python
Python列表解析操作实例总结
2020/02/26 Python
tensorflow 20:搭网络,导出模型,运行模型的实例
2020/05/26 Python
基于Python绘制美观动态圆环图、饼图
2020/06/03 Python
简单了解Python变量作用域正确使用方法
2020/06/12 Python
keras 模型参数,模型保存,中间结果输出操作
2020/07/06 Python
Python unittest装饰器实现原理及代码
2020/09/08 Python
澳大利亚工具仓库:Tools Warehouse
2018/10/15 全球购物
道德之星事迹材料
2014/05/03 职场文书
十八大标语口号
2014/10/09 职场文书
2014年大学班级工作总结
2014/11/14 职场文书
检讨书模板
2015/01/29 职场文书
初中体育教学随笔
2015/08/15 职场文书
2015年高中语文教学总结
2015/08/18 职场文书
MySQL面试题讲解之如何设置Hash索引
2021/11/01 MySQL