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 对象定义方法 简单易学
Mar 22 Javascript
javascript 嵌套的函数(作用域链)
Mar 15 Javascript
JavaScript中SQL语句的应用实现
May 04 Javascript
如何让页面在打开时自动刷新一次让图片全部显示
Dec 17 Javascript
js实现的全国省市二级联动下拉选择菜单完整实例
Aug 17 Javascript
JS文字球状放大效果代码分享
Aug 19 Javascript
Angularjs 实现分页功能及示例代码
Sep 14 Javascript
详解Python中logging日志模块在多进程环境下的使用
Dec 26 Javascript
前端分页功能的实现以及原理(jQuery)
Jan 22 Javascript
使用webpack搭建vue环境的教程详解
Dec 31 Javascript
解决vue-router路由拦截造成死循环问题
Aug 05 Javascript
vue 实现click同时传入事件对象和自定义参数
Jan 29 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
站长助手-网站web在线管理程序 v1.0 下载
2007/05/12 PHP
Yii框架在页面输出执行sql语句以方便调试的实现方法
2014/12/24 PHP
thinkPHP5.0框架验证码调用及点击图片刷新简单实现方法
2018/09/07 PHP
CentOS7编译安装php7.1的教程详解
2019/04/18 PHP
innerHTML,outerHTML,innerTEXT三者之间的区别
2007/01/28 Javascript
javascript正则表达式使用replace()替换手机号的方法
2015/01/19 Javascript
jQuery图片左右滚动代码 有左右按钮实例
2016/06/20 Javascript
由浅入深剖析Angular表单验证
2016/07/14 Javascript
微信小程序 图片等比例缩放(图片自适应屏幕)
2016/11/16 Javascript
微信小程序 图片上传实例详解
2017/05/05 Javascript
JavaScript对JSON数据进行排序和搜索
2017/07/24 Javascript
mui开发中获取单选按钮、复选框的值(实例讲解)
2017/07/24 Javascript
vue使用axios跨域请求数据问题详解
2017/10/18 Javascript
vue中手机号,邮箱正则验证以及60s发送验证码的实例
2018/03/16 Javascript
JavaScript实现封闭区域布尔运算的示例代码
2018/06/25 Javascript
vue实现移动端轻量日期组件不依赖第三方库的方法
2019/04/28 Javascript
vue axios post发送复杂对象问题
2019/06/04 Javascript
JavaScript动态检测密码强度原理及实现方法详解
2019/06/11 Javascript
教你如何用Node实现API的转发(某音乐)
2019/09/20 Javascript
使用pkg打包ThinkJS项目的方法步骤
2019/12/30 Javascript
React学习之JSX与react事件实例分析
2020/01/06 Javascript
原生javascript制作贪吃蛇小游戏的方法分析
2020/02/26 Javascript
Vue 封装防刷新考试倒计时组件的实现
2020/06/05 Javascript
JavaScript实现滚动加载更多
2020/12/27 Javascript
[57:28]2018DOTA2亚洲邀请赛 4.6 淘汰赛 TNC vs Liquid 第一场
2018/04/10 DOTA
Python描述器descriptor详解
2015/02/03 Python
numpy.transpose对三维数组的转置方法
2018/04/17 Python
使用Python的Django和layim实现即时通讯的方法
2018/05/25 Python
浅谈tensorflow中dataset.shuffle和dataset.batch dataset.repeat注意点
2020/06/08 Python
印度首选时尚目的地:Reliance Trends
2018/01/17 全球购物
小学信息技术教学反思
2014/02/10 职场文书
《理想的风筝》教学反思
2014/04/11 职场文书
奥巴马竞选演讲稿
2014/05/15 职场文书
民事起诉书范本
2015/05/19 职场文书
浪漫的婚礼主持词
2015/06/30 职场文书
CSS完成视差滚动效果
2021/04/27 HTML / CSS