深入浅析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 相关文章推荐
jQuery实现的网格线绘制方法
Jun 20 Javascript
React快速入门教程
Jan 17 Javascript
jQuery实现导航回弹效果
Feb 27 Javascript
js实现自动图片轮播代码
Mar 22 Javascript
老生常谈angularjs中的$state.go
Apr 24 Javascript
AngularJS入门教程一:路由用法初探
May 27 Javascript
Vue keep-alive实践总结(推荐)
Aug 31 Javascript
vue+element-ui+ajax实现一个表格的实例
Mar 09 Javascript
Vue中 v-if/v-show/插值表达式导致闪现的原因及解决办法
Oct 12 Javascript
详解JS实现简单的时分秒倒计时代码
Apr 25 Javascript
深入解析koa之中间件流程控制
Jun 17 Javascript
微信小程序webview与h5通过postMessage实现实时通讯的实现
Aug 20 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
PHP校验ISBN码的函数代码
2011/01/17 PHP
php中str_pad()函数用法分析
2017/03/28 PHP
YII分模块加载路由的实现方法
2018/10/01 PHP
25个非常棒的jQuery滑块插件和教程小结
2011/09/02 Javascript
值得学习的bootstrap fileinput文件上传工具
2016/11/08 Javascript
Node.js使用orm2进行update操作时关联字段无法修改的解决方法
2017/06/13 Javascript
vue router学习之动态路由和嵌套路由详解
2017/09/21 Javascript
JavaScript实现的DOM树遍历方法详解【二叉DOM树、多叉DOM树】
2018/05/07 Javascript
Node.js原生api搭建web服务器的方法步骤
2019/02/15 Javascript
搭建一个Koa后端项目脚手架的方法步骤
2019/05/30 Javascript
JavaScript中遍历的十种方法总结
2020/12/15 Javascript
[03:03]2014DOTA2国际邀请赛 EG战队专访
2014/07/12 DOTA
[02:31]2014DOTA2国际邀请赛2009专访:干爹表现出乎意料 看好DK杀回决赛
2014/07/20 DOTA
[01:22:28]DOTA2-DPC中国联赛 正赛 SAG vs RNG BO3 第一场 1月18日
2021/03/11 DOTA
Python的多维空数组赋值方法
2018/04/13 Python
Python3.5基础之NumPy模块的使用图文与实例详解
2019/04/24 Python
详解Python并发编程之创建多线程的几种方法
2019/08/23 Python
详解numpy矩阵的创建与数据类型
2019/10/18 Python
python类中super() 的使用解析
2019/12/19 Python
python实现时间序列自相关图(acf)、偏自相关图(pacf)教程
2020/06/03 Python
用python给csv里的数据排序的具体代码
2020/07/17 Python
使用python画出逻辑斯蒂映射(logistic map)中的分叉图案例
2020/12/11 Python
HTML5注册页面示例代码
2014/03/27 HTML / CSS
来自世界上最好大学的在线课程:edX
2018/10/16 全球购物
贪睡宠物用品:Snoozer Pet Products
2020/02/04 全球购物
附答案的Java面试题
2012/11/19 面试题
幼儿园教师请假制度
2014/01/16 职场文书
高级销售求职信
2014/02/21 职场文书
《祁黄羊》教学反思
2014/04/22 职场文书
学生会辞职信
2015/03/02 职场文书
物业项目经理岗位职责
2015/04/01 职场文书
搬迁通知
2015/04/20 职场文书
用Python远程登陆服务器的步骤
2021/04/16 Python
Windows 11上手初体验:任务栏和开始菜单等迎来大改
2021/11/21 数码科技
苹果电脑mac os中货币符号快捷输入
2022/02/17 杂记
redis复制有可能碰到的问题汇总
2022/04/03 Redis