深入浅析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聚焦于第一个字段的代码
Oct 15 Javascript
两个Javascript小tip资料
Nov 23 Javascript
在Ajax中使用Flash实现跨域数据读取的实现方法
Dec 02 Javascript
jQuery调用WebService的实现代码
Jun 19 Javascript
jquery中ajax学习笔记一
Oct 16 Javascript
jquery实现弹出div,始终显示在屏幕正中间的简单实例
Mar 08 Javascript
探讨JavaScript中的Rest参数和参数默认值
Jul 29 Javascript
js实现移动端微信页面禁止字体放大
Feb 16 Javascript
JavaScript自定义文本框光标
Mar 05 Javascript
vue.js轮播图组件使用方法详解
Jul 03 Javascript
layui实现三级联动效果
Jul 26 Javascript
浅谈vue在html中出现{{}}的原因及解决方式
Nov 16 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
1982年日本摄影师镜头下的中国孩子 那无忧无虑的童年
2020/03/12 杂记
PHP iconv 解决utf-8和gb2312编码转换问题
2010/04/12 PHP
php+jquery编码方面的一些心得(utf-8 gb2312)
2010/10/12 PHP
PHP实现获取客户端IP并获取IP信息
2015/03/17 PHP
使用PHPCMS搭建wap手机网站
2015/09/20 PHP
总结一些PHP中好用但又容易忽略的小知识
2017/06/02 PHP
javascript web对话框与弹出窗口
2009/02/22 Javascript
js getBoundingClientRect() 来获取页面元素的位置
2010/11/25 Javascript
autoIMG 基于jquery的图片自适应插件代码
2011/03/12 Javascript
javascript强大的日期函数代码分享
2013/09/04 Javascript
JavaScript中的alert()函数使用技巧详解
2014/12/29 Javascript
javascript获取重复次数最多的字符
2015/07/08 Javascript
有关jquery与DOM节点操作方法和属性记录
2016/04/15 Javascript
jQuery Ajax页面局部加载方法汇总
2016/06/02 Javascript
JS作用域链详解
2017/06/26 Javascript
Ionic3实现图片瀑布流布局
2017/08/09 Javascript
使用 webpack 插件自动生成 vue 路由文件的方法
2019/08/20 Javascript
Vue 中 a标签上href无法跳转的解决方式
2019/11/12 Javascript
JavaScript仿京东秒杀倒计时
2020/03/17 Javascript
微信公众号中的JSSDK接入及invalid signature等常见错误问题分析(全面解析)
2020/04/11 Javascript
JavaScript进阶(一)变量声明提升实例分析
2020/05/09 Javascript
vue实现购物车的小练习
2020/12/21 Vue.js
python 接口_从协议到抽象基类详解
2017/08/24 Python
浅析python3中的os.path.dirname(__file__)的使用
2018/08/30 Python
pytorch数据预处理错误的解决
2020/02/20 Python
CSS3实现线性渐变用法示例代码详解
2020/08/07 HTML / CSS
函授本科自我鉴定
2013/11/03 职场文书
餐饮业员工工作决心书
2014/03/11 职场文书
小学生国庆演讲稿
2014/09/05 职场文书
社区综治工作汇报
2014/10/27 职场文书
2016年大学自主招生自荐信范文
2015/03/24 职场文书
幼儿园端午节活动总结
2015/05/05 职场文书
离职告别感言
2015/08/04 职场文书
2019年最新版见习人员管理制度!
2019/07/08 职场文书
使用tensorflow 实现反向传播求导
2021/05/26 Python
Redis之RedisTemplate配置方式(序列和反序列化)
2022/03/13 Redis