深入浅析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 相关文章推荐
js中cookie的使用详细分析
May 28 Javascript
基于MooTools的很有创意的滚动条时钟动画
Nov 14 Javascript
jQuery拖拽div实现思路
Feb 19 Javascript
点击button获取text内容并改变样式的js实现
Sep 09 Javascript
JavaScript实现继承的4种方法总结
Oct 16 Javascript
AngularJS控制器详解及示例代码
Aug 16 Javascript
基于JavaScript实现跳转提示页面
Sep 24 Javascript
CSS3 media queries结合jQuery实现响应式导航
Sep 30 Javascript
JS按条件 serialize() 对应标签的使用方法
Jul 24 Javascript
node.js 发布订阅模式的实例
Sep 10 Javascript
微信小程序-可移动菜单的实现过程详解
Jun 24 Javascript
Vue 中 filter 与 computed 的区别与用法解析
Nov 21 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加密解密函数代码
2013/06/19 PHP
使用淘宝IP库获取用户ip地理位置
2013/10/27 PHP
Yii查询生成器(Query Builder)用法实例教程
2014/09/04 PHP
Yii实现多按钮保存与提交的方法
2014/12/03 PHP
php通过淘宝API查询IP地址归属等信息
2015/12/25 PHP
掌握PHP垃圾回收机制详解
2019/03/13 PHP
js控制表单不能输入空格的小例子
2013/11/20 Javascript
利用jquery动画特效和css打造的侧边弹出垂直导航
2014/04/04 Javascript
jQuery中$.each使用详解
2015/01/29 Javascript
JS设置网页图片vspace和hspace属性的方法
2015/04/01 Javascript
jquery实现简单的轮换出现效果实例
2015/07/23 Javascript
JavaScript的兼容性与调试技巧
2016/11/22 Javascript
Bootstrap中data-target 到底是什么
2017/02/14 Javascript
基于jquery实现多选下拉列表
2017/08/02 jQuery
JavaScript Array对象使用方法解析
2019/09/24 Javascript
Angular 多模块项目构建过程
2020/02/13 Javascript
[01:17]辉夜杯战队访谈宣传片—EHOME
2015/12/25 DOTA
python切换hosts文件代码示例
2013/12/31 Python
Django使用详解:ORM 的反向查找(related_name)
2018/05/30 Python
详解Python函数式编程—高阶函数
2019/03/29 Python
python 字典 setdefault()和get()方法比较详解
2019/08/07 Python
python实现npy格式文件转换为txt文件操作
2020/07/01 Python
django rest framework使用django-filter用法
2020/07/15 Python
python爬虫数据保存到mongoDB的实例方法
2020/07/28 Python
Python 微信公众号文章爬取的示例代码
2020/11/30 Python
HTML5 embed标签定义和用法详解
2014/05/09 HTML / CSS
JAVA中运算符的分类及举例
2015/09/12 面试题
小学美术教学反思
2014/02/01 职场文书
教育技术职业规划范文
2014/03/04 职场文书
岗位竞聘演讲稿范文
2014/04/24 职场文书
张家口市高新区党工委群众路线教育实践活动整改方案
2014/10/25 职场文书
史上最全的军训拉歌口号
2015/12/25 职场文书
2016党员党课心得体会
2016/01/07 职场文书
《活见鬼》教学反思
2016/02/24 职场文书
《钢铁是怎样炼成的》高中读后感
2019/08/07 职场文书
NoSQL优缺点与MongoDB数据库简介
2022/06/05 MongoDB