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 动态加载 css 方法总结
Jul 11 Javascript
JavaScript 常用函数库详解
Oct 21 Javascript
解释&amp;&amp;和||在javascript中的另类用法
Jul 28 Javascript
js实现点击添加一个input节点
Dec 05 Javascript
深入理解JavaScript系列(26):设计模式之构造函数模式详解
Mar 03 Javascript
jQuery实现鼠标滑过链接控制图片的滑动展开与隐藏效果
Oct 28 Javascript
jQuery each函数源码分析
May 25 Javascript
只需五句话搞定JavaScript作用域(经典)
Jul 26 Javascript
在Docker快速部署Node.js应用的详细步骤
Sep 02 Javascript
浅谈AngularJS中ng-class的使用方法
Nov 11 Javascript
js 奇葩技巧之隐藏代码
Aug 11 Javascript
vue实现广告栏上下滚动效果
Nov 26 Vue.js
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 curl_init函数用法
2014/01/31 PHP
php实现的生成迷宫与迷宫寻址算法完整实例
2017/11/06 PHP
详解PHP实现支付宝小程序用户授权的工具类
2018/12/25 PHP
php实现通过stomp协议连接ActiveMQ操作示例
2020/02/23 PHP
JavaScript 操作table,可以新增行和列并且隔一行换背景色代码分享
2013/07/05 Javascript
简单的jquery左侧导航栏和页面选中效果
2014/08/21 Javascript
JS往数组中添加项性能分析
2015/02/25 Javascript
jQuery.Highcharts.js绘制柱状图饼状图曲线图
2015/03/14 Javascript
JavaScript弹窗基础篇
2016/04/27 Javascript
Javascript基础_简单比较undefined和null 值
2016/06/14 Javascript
AngularJs  Understanding Angular Templates
2016/09/02 Javascript
connection reset by peer问题总结及解决方案
2016/10/21 Javascript
jQuery双向列表选择器DIV模拟版
2016/11/01 Javascript
Javascript 高性能之递归,迭代,查表法详解及实例
2017/01/08 Javascript
微信小程序 picker 组件详解及简单实例
2017/01/10 Javascript
JavaScript 中 apply 、call 的详解
2017/03/21 Javascript
Bootstrap-table使用footerFormatter做统计列功能
2018/09/07 Javascript
小程序实现授权登陆的解决方案
2018/12/02 Javascript
Angular请求防抖处理第一次请求失效问题
2019/05/17 Javascript
微信小程序 冒泡事件原理解析
2019/09/27 Javascript
Vue+scss白天和夜间模式切换功能的实现方法
2021/01/05 Vue.js
JS实现纸牌发牌动画
2021/01/19 Javascript
[36:02]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第一局
2016/02/28 DOTA
[01:42]DOTA2 – 虚无之灵
2019/08/25 DOTA
Python实现遍历目录的方法【测试可用】
2017/03/22 Python
用Python批量把文件复制到另一个文件夹的实现方法
2019/08/16 Python
通过python3实现投票功能代码实例
2019/09/26 Python
Python numpy线性代数用法实例解析
2019/11/15 Python
使用遗传算法求二元函数的最小值
2020/02/11 Python
Python过滤掉numpy.array中非nan数据实例
2020/06/08 Python
python实现发送邮件
2021/03/02 Python
英语专业毕业生自荐信
2013/10/28 职场文书
法律专业实习鉴定
2013/12/22 职场文书
高中学生评语大全
2014/04/25 职场文书
2015年读书月活动总结
2015/03/26 职场文书
导游词之黄果树瀑布
2019/09/20 职场文书