深入浅析JavaScript中的arguments对象(强力推荐)


Posted in Javascript onJune 03, 2016

1、在JavaScript中,arguments对象是比较特别的一个对象,实际上是当前函数的一个内置属性。arguments非常类似Array,但实际上又不是一个Array实例。可以通过如下代码得以证实(当然,实际上,在函数funcArg中,调用arguments是不必要写成funcArg.arguments,直接写arguments即可)。

Array.prototype.testArg = "test";
function funcArg() {
alert(funcArg.arguments.testArg); 
alert(funcArg.arguments[]);
}
alert(new Array().testArg); // result: "test"
funcArg(); // result: "undefined" ""

2、arguments对象的长度是由实参个数而不是形参个数决定的。形参是函数内部重新开辟内存空间存储的变量,但是其与arguments对象内存空间并不重叠。对于arguments和值都存在的情况下,两者值是同步的,但是针对其中一个无值的情况下,对于此无值的情形值不会得以同步。如下代码可以得以验证。

function f(a, b, c){
alert(arguments.length); // result: ""
a = ;
alert(arguments[]); // result: ""
arguments[] = "qqyumidi";
alert(a); // result: "qqyumidi"
alert(c); // result: "undefined"
c = ;
alert(arguments[]); // result: "undefined"
}
f(, );

3、由JavaScript中函数的声明和调用特性,可以看出JavaScript中函数是不能重载的。

根据其他语言中重载的依据:"函数返回值不同或形参个数不同",我们可以得出上述结论:

第一:Javascript函数的声明是没有返回值类型这一说法的;

第二:JavaScript中形参的个数严格意义上来讲只是为了方便在函数中的变量操作,实际上实参已经存储在arguments对象中了。

另外,从JavaScript函数本身深入理解为什么JavaScript中函数是不能重载的:在JavaScript中,函数其实也是对象,函数名是关于函数的引用,或者说函数名本身就是变量。对于如下所示的函数声明与函数表达式,其实含以上是一样的(在不考虑函数声明与函数表达式区别的前提下),非常有利于我们理解JavaScript中函数是不能重载的这一特性。

function f(a){
return a + ;
}
function f(a){
return a - ;
}
// 在不考虑函数声明与函数表达式区别的前提下,其等价于如下
var f = function(a){
return a + ;
}
var f = function(a){
return a - ;
}

4、arguments对象中有一个非常有用的属性:callee。arguments.callee返回此arguments对象所在的当前函数引用。在使用函数递归调用时推荐使用arguments.callee代替函数名本身。

如下:

function count(a){
if(a==){
return ;
} 
return a + arguments.callee(--a);
}
var mm = count();
alert(mm);

以上所述是小编给大家介绍的JavaScript中的arguments对象,希望对大家有所帮助,如果大家在参考过程中发现有任何疑问请给我留言,小编会及时回复大家的,在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
Web安全测试之XSS实例讲解
Aug 15 Javascript
利用纯Vue.js构建Bootstrap组件
Nov 03 Javascript
简单实现Bootstrap标签页
Aug 09 Javascript
vue图片加载与显示默认图片实例代码
Mar 16 Javascript
最实用的JS数组函数整理
Dec 05 Javascript
js中getBoundingClientRect的作用及兼容方案详解
Feb 01 Javascript
记录一次开发微信网页分享的步骤
May 07 Javascript
js获取对象,数组所有属性键值(key)和对应值(value)的方法示例
Jun 19 Javascript
详解JavaScript自定义函数
Jul 29 Javascript
JavaScript实现跟随鼠标移动的盒子
Jan 28 Javascript
一百多行代码实现react拖拽hooks
Mar 23 Javascript
HTML+JS实现在线朗读器
Feb 15 Javascript
JS中使用变量保存arguments对象的方法
Jun 03 #Javascript
jQuery+ajax简单实现文件上传的方法
Jun 03 #Javascript
JS使用eval()动态创建变量的方法
Jun 03 #Javascript
jQuery插件编写步骤详解
Jun 03 #Javascript
jQuery ajax全局函数处理session过期后的ajax跳转问题
Jun 03 #Javascript
JSON字符串转换JSONObject和JSONArray的方法
Jun 03 #Javascript
JS判断字符串变量是否含有某个字串的实现方法
Jun 03 #Javascript
You might like
为什么那些咖啡爱好者大多看不上连锁咖啡店?
2021/03/06 咖啡文化
注册页面之前先验证用户名是否存在的php代码
2012/07/14 PHP
php实现计算百度地图坐标之间距离的方法
2016/05/05 PHP
PHP中ajax无刷新上传图片与图片下载功能
2017/02/21 PHP
thinkPHP5.0框架自动加载机制分析
2017/03/18 PHP
PHP后端银联支付及退款实例代码
2017/06/23 PHP
Ajax+PHP实现的删除数据功能示例
2019/02/12 PHP
解决thinkphp5未定义变量会抛出异常,页面错误,请稍后再试的问题
2019/10/16 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
2020/03/30 PHP
JavaScript使用prototype定义对象类型
2007/02/07 Javascript
改写一个简单的菜单 弹性大小
2010/12/02 Javascript
js,jQuery 排序的实现代码,网页标签排序的实现,标签排序
2011/04/27 Javascript
关于js注册事件的常用方法
2013/04/03 Javascript
jquery自定义类似$.ajax()的方法实现代码
2013/08/13 Javascript
使用 Node.js 做 Function Test实现方法
2013/10/25 Javascript
js判断运行jsp页面的浏览器类型以及版本示例
2013/10/30 Javascript
JavaScript插件化开发教程(五)
2015/02/01 Javascript
【经典源码收藏】基于jQuery的项目常见函数封装集合
2016/06/07 Javascript
微信开发 使用picker封装省市区三级联动模板
2016/10/28 Javascript
利用Javascript实现简单的转盘抽奖
2017/02/13 Javascript
JS变量中有var定义和无var定义的区别以及es6中let命令和const命令
2017/02/19 Javascript
vue左右侧联动滚动的实现代码
2018/06/06 Javascript
解决vue中监听input只能输入数字及英文或者其他情况的问题
2018/08/30 Javascript
vue路由前进后退动画效果的实现代码
2018/12/10 Javascript
vue-model实现简易计算器
2020/08/17 Javascript
Python 遍历列表里面序号和值的方法(三种)
2017/02/17 Python
关于pytorch多GPU训练实例与性能对比分析
2019/08/19 Python
Python使用qrcode二维码库生成二维码方法详解
2020/02/17 Python
HTML5 video标签(播放器)学习笔记(二):播放控制
2015/04/24 HTML / CSS
潘多拉珠宝英国官方网上商店:PANDORA英国
2018/06/12 全球购物
后勤主管工作职责
2013/12/07 职场文书
群众路线教育实践活动思想汇报(2014特荐篇)
2014/09/16 职场文书
初中家长评语和期望
2014/12/26 职场文书
大连导游词
2015/02/12 职场文书
golang interface判断为空nil的实现代码
2021/04/24 Golang
MySQL开启事务的方式
2021/06/26 MySQL