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 相关文章推荐
用jQuery中的ajax分页实现代码
Sep 20 Javascript
JavaScript运行时库属性一览表
Mar 14 Javascript
jQuery中slideUp 和 slideDown 的点击事件
Feb 26 Javascript
js 弹出虚拟键盘修改密码的简单实例
Oct 10 Javascript
原生js实现淘宝购物车功能
Jun 23 Javascript
jQuery实现下拉菜单的实例代码
Jun 19 jQuery
通过命令行创建vue项目的方法
Jul 20 Javascript
JS实现用特殊符号替换字符串的中间部分区域的实例代码
Jul 24 Javascript
JavaScript怎样在删除前添加确认弹出框?
May 27 Javascript
Vue+element 解决浏览器自动填充记住的账号密码问题
Jun 11 Javascript
JS图片懒加载技术实现过程解析
Jul 27 Javascript
vue3语法糖内的defineProps及defineEmits
Apr 14 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
咖啡常见的种类
2021/03/03 新手入门
解析PHP将对象转换成数组的方法(兼容多维数组类型)
2013/06/21 PHP
php判断字符串在另一个字符串位置的方法
2014/02/27 PHP
微信支付的开发流程详解
2016/09/13 PHP
PHP用户注册邮件激活账户的实现代码
2017/05/31 PHP
Prototype使用指南之string.js
2007/01/10 Javascript
javascript 打印内容方法小结
2009/11/04 Javascript
Eval and new funciton not the same thing
2012/12/27 Javascript
JavaScript实现维吉尼亚(Vigenere)密码算法实例
2013/11/22 Javascript
javascript日期格式化示例分享
2014/03/05 Javascript
Javascript 实现复制(Copy)动作方法大全
2014/06/20 Javascript
Vue.js实现列表清单的操作方法
2017/11/15 Javascript
jQuery实现的简单手风琴效果示例
2018/08/29 jQuery
Vue中 v-if 和v-else-if页面加载出现闪现的问题及解决方法
2018/10/12 Javascript
Bootstrap table 实现树形表格联动选中联动取消功能
2019/09/30 Javascript
如何优雅地取消 JavaScript 异步任务
2020/03/22 Javascript
解决VantUI popup 弹窗不弹出或无蒙层的问题
2020/11/03 Javascript
python 随机数生成的代码的详细分析
2011/05/15 Python
python的描述符(descriptor)、装饰器(property)造成的一个无限递归问题分享
2014/07/09 Python
python爬取51job中hr的邮箱
2016/05/14 Python
tensorflow训练中出现nan问题的解决
2018/02/10 Python
python3爬取数据至mysql的方法
2018/06/26 Python
Python API 自动化实战详解(纯代码)
2019/06/11 Python
Python实现字符串中某个字母的替代功能
2019/10/21 Python
Python numpy数组转置与轴变换
2019/11/15 Python
Python+Redis实现布隆过滤器
2019/12/08 Python
pyqt5中动画的使用详解
2020/04/01 Python
Keras Convolution1D与Convolution2D区别说明
2020/05/22 Python
意大利会呼吸的鞋:Geox健乐士
2017/02/12 全球购物
JD Sports马来西亚:英国领先的运动鞋和运动服饰零售商
2018/03/13 全球购物
医学生自荐信
2013/12/03 职场文书
竞争上岗实施方案
2014/03/21 职场文书
党员对照检查剖析材料
2014/10/13 职场文书
学年个人总结范文
2015/03/05 职场文书
地道战观后感
2015/06/04 职场文书
2015年党建工作汇报材料
2015/06/25 职场文书