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 相关文章推荐
juqery 学习之三 选择器 简单 内容
Nov 25 Javascript
关于window.pageYOffset和document.documentElement.scrollTop
Apr 05 Javascript
jQuery验证Checkbox是否选中的代码 推荐
Sep 04 Javascript
jQuery插件EasyUI实现Layout框架页面中弹出窗体到最顶层效果(穿越iframe)
Aug 05 Javascript
分析javascript中9 个常见错误阻碍你进步
Sep 18 Javascript
无限循环轮播图之运动框架(原生JS实现)
Oct 01 Javascript
Vue响应式原理深入解析及注意事项
Dec 11 Javascript
开发一个Parcel-vue脚手架工具(详细步骤)
Sep 22 Javascript
js实现每日签到功能
Nov 29 Javascript
VUE2.0+ElementUI2.0表格el-table循环动态列渲染的写法详解
Nov 30 Javascript
vue+elementUI组件table实现前端分页功能
Nov 15 Javascript
JS实现容器模块左右拖动效果
Jan 14 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.ini中文版(2)
2006/10/09 PHP
php程序员应具有的7种能力小结
2014/11/27 PHP
php+mysql数据库查询实例
2015/01/21 PHP
php统计数组元素个数的方法
2015/07/02 PHP
写了10年的Javascript也未必全了解的连续赋值运算
2011/03/25 Javascript
对jQuery的事件绑定的一些思考(补充)
2013/04/20 Javascript
Js表格万条数据瞬间加载实现代码
2014/02/20 Javascript
JavaScript设计模式之代理模式介绍
2014/12/28 Javascript
jQuery里filter()函数与find()函数用法分析
2015/06/24 Javascript
实例讲解jQuery中对事件的命名空间的运用
2016/05/24 Javascript
Bootstrap基本插件学习笔记之Alert警告框(20)
2016/12/08 Javascript
基于iScroll实现下拉刷新和上滑加载效果
2017/07/18 Javascript
angularjs实现猜数字大小功能
2020/05/20 Javascript
bootstrap轮播模板使用方法详解
2017/11/17 Javascript
vue中v-cloak解决刷新或者加载出现闪烁问题(显示变量)
2018/04/20 Javascript
微信小程序结合mock.js实现后台模拟及调试
2019/03/28 Javascript
微信小程序分享功能onShareAppMessage(options)用法分析
2019/04/24 Javascript
async/await让异步操作同步执行的方法详解
2019/11/01 Javascript
Vue 打包体积优化方案小结
2020/05/20 Javascript
[00:12]DAC2018 天才少年转战三号位,他的SOLO是否仍如昔日般强大?
2018/04/06 DOTA
python基于socket实现网络广播的方法
2015/04/29 Python
pandas 缺失值与空值处理的实现方法
2019/10/12 Python
Python使用贪婪算法解决问题
2019/10/22 Python
python查找特定名称文件并按序号、文件名分行打印输出的方法
2020/04/24 Python
Python图像读写方法对比
2020/11/16 Python
Pandas中DataFrame交换列顺序的方法实现
2020/12/14 Python
英国赛车、汽车改装和摩托车零件购物网站:Demon Tweeks
2018/10/29 全球购物
C#面试常见问题
2013/02/25 面试题
老人再婚离婚协议书范本
2014/10/27 职场文书
计算机考试作弊检讨书1000字
2015/01/01 职场文书
十月围城观后感
2015/06/08 职场文书
幼儿教师三分钟演讲稿
2019/06/21 职场文书
SQLServer2019 数据库的基本使用之图形化界面操作的实现
2021/04/08 SQL Server
详解Python生成器和基于生成器的协程
2021/06/03 Python
Win10多屏显示如何设置?Win10电脑多屏显示设置操作方法
2022/07/07 数码科技
Python测试框架pytest核心库pluggy详解
2022/08/05 Golang