深入浅析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修改table中Td的值(定义td的单击事件)
Jan 10 Javascript
使用JS取得焦点(focus)元素代码
Mar 22 Javascript
js实现点击图片将图片地址复制到粘贴板的方法
Feb 16 Javascript
jQuery实现图片轮播效果代码(基于jquery.pack.js插件)
Jun 02 Javascript
JS重载实现方法分析
Dec 16 Javascript
Angular如何引入第三方库的方法详解
Jul 13 Javascript
jQuery Autocomplete简介_动力节点Java学院整理
Jul 17 jQuery
基于Node.js实现压缩和解压缩的方法
Feb 13 Javascript
js正则取值的结果数组调试方法
Oct 10 Javascript
js实现简易计算器功能
Oct 18 Javascript
微信小程序全选多选效果实现代码解析
Jan 21 Javascript
使用js原生实现年份轮播选择效果实例
Jan 12 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
《OVERLORD》手游英文版即将上线 手机上也能扮演骨王
2020/04/09 日漫
php获取本地图片文件并生成xml文件输出具体思路
2013/04/27 PHP
CodeIgniter上传图片成功的全部过程分享
2013/08/12 PHP
win平台安装配置Nginx+php+mysql 环境
2016/01/12 PHP
Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片示例
2017/09/20 PHP
php常用字符串查找函数strstr()与strpos()实例分析
2019/06/21 PHP
laravel实现查询最后执行的一条sql语句的方法
2019/10/09 PHP
javascript hashtable实现代码
2009/10/13 Javascript
jQuery EasyUI 中文API Button使用实例
2010/04/14 Javascript
读jQuery之七 判断点击了鼠标哪个键的代码
2011/06/21 Javascript
js根据给定的日期计算当月有多少天实现思路及代码
2013/02/25 Javascript
批量实现面向对象的实例代码
2013/07/01 Javascript
jQuery解析XML文件同时动态增加js文件的方法
2015/06/01 Javascript
js中document.referrer实现移动端返回上一页
2017/02/22 Javascript
vue 封装自定义组件之tabal列表编辑单元格组件实例代码
2017/09/07 Javascript
浅谈Vue.js路由管理器 Vue Router
2018/08/16 Javascript
javascrit中undefined和null的区别详解
2019/04/07 Javascript
微信小程序遍历Echarts图表实现多个饼图
2019/04/25 Javascript
微信小程序如何使用canvas二维码保存至手机相册
2019/07/15 Javascript
解决layui的table插件无法多层级获取json数据的问题
2019/09/19 Javascript
vue自定义正在加载动画的例子
2019/11/14 Javascript
vue 中的动态传参和query传参操作
2020/11/09 Javascript
Python实现简易端口扫描器代码实例
2017/03/15 Python
Python实现的线性回归算法示例【附csv文件下载】
2018/12/29 Python
Python GUI自动化实现绕过验证码登录
2020/01/10 Python
Pytorch GPU显存充足却显示out of memory的解决方式
2020/01/13 Python
Python大批量搜索引擎图像爬虫工具详解
2020/11/16 Python
详解tf.device()指定tensorflow运行的GPU或CPU设备实现
2021/02/20 Python
pyx文件 生成pyd 文件用于 cython调用的实现
2021/03/04 Python
利用CSS3实现炫酷的飞机起飞动画
2016/09/17 HTML / CSS
Cotton On香港网站:澳洲时装连锁品牌
2018/11/01 全球购物
你常见到的runtime exception
2016/09/05 面试题
企业节能减排实施方案
2014/03/19 职场文书
门面房租房协议书
2014/12/01 职场文书
Python基础详解之邮件处理
2021/04/28 Python
Android自定义双向滑动控件
2022/04/19 Java/Android