深入浅析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 相关文章推荐
理解JavaScript中的事件
Sep 23 Javascript
JsEasy简介 JsEasy是什么?与下载
Mar 07 Javascript
Js+Flash实现访问剪切板操作
Nov 20 Javascript
jquery使用jxl插件导出excel示例
Apr 14 Javascript
Jquery遍历Json数据的方法
Apr 20 Javascript
jQuery获得字体颜色16位码的方法
Feb 20 Javascript
js选择器全面解析
Jun 27 Javascript
JavaScript结合Bootstrap仿微信后台多图文界面管理
Jul 22 Javascript
input获取焦点时底部菜单被顶上来问题的解决办法
Jan 24 Javascript
JavaScript中offsetWidth的bug及解决方法
May 17 Javascript
利用js canvas实现五子棋游戏
Oct 11 Javascript
vue+elementui通用弹窗的实现(新增+编辑)
Jan 07 Vue.js
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下使用无限生命期Session的方法
2007/03/16 PHP
php封装db类连接sqlite3数据库的方法实例
2017/12/19 PHP
IE6、IE7中setAttribute不支持class/for/rowspan/colspan等属性
2011/08/28 Javascript
node.js 一个简单的页面输出实现代码
2012/03/07 Javascript
jfinal与bootstrap的登录跳转实战演习
2015/09/22 Javascript
JavaScript严格模式详解
2015/11/18 Javascript
js实现文字无缝向上滚动
2017/02/16 Javascript
如何选择jQuery版本 1.x? 2.x? 3.x?
2017/04/01 jQuery
JavaScript基础进阶之数组方法总结(推荐)
2017/09/04 Javascript
Vue-resource拦截器判断token失效跳转的实例
2017/10/27 Javascript
详解新手使用vue-router传参时注意事项
2019/06/06 Javascript
js删除指定位置超链接中含有百度与360的标题
2021/01/06 Javascript
[05:46]DOTA2英雄梦之声_第18期_陈
2014/06/20 DOTA
python文件和目录操作方法大全(含实例)
2014/03/12 Python
对numpy.append()里的axis的用法详解
2018/06/28 Python
tensorflow 加载部分变量的实例讲解
2018/07/27 Python
Django Aggregation聚合使用方法解析
2019/08/01 Python
flask框架渲染Jinja模板与传入模板变量操作详解
2020/01/25 Python
MAC平台基于Python Appium环境搭建过程图解
2020/08/13 Python
Python 字典一个键对应多个值的方法
2020/09/29 Python
jupyter 添加不同内核的操作
2021/02/06 Python
Python爬虫设置Cookie解决网站拦截并爬取蚂蚁短租的问题
2021/02/22 Python
CSS3中Color的一些特性介绍
2012/05/27 HTML / CSS
HTML5安全介绍之内容安全策略(CSP)简介
2012/07/10 HTML / CSS
德国孕妇装和婴童服装网上商店:bellybutton
2018/04/12 全球购物
写自荐信的注意事项
2014/03/09 职场文书
yy婚礼主持词
2014/03/14 职场文书
租赁意向书范本
2014/04/01 职场文书
社会稳定风险评估方案
2014/06/02 职场文书
经营理念标语
2014/06/21 职场文书
白鹤梁导游词
2015/02/06 职场文书
行政主管岗位职责范本
2015/04/09 职场文书
安全教育第一课观后感
2015/06/17 职场文书
Jupyter Notebook内使用argparse报错的解决方案
2021/06/03 Python
Windows11性能真的上涨35%? 桌面酷睿i9实测结果公开
2021/11/21 数码科技
iSCSI服务器CHAP双向认证配置
2022/04/01 Servers