深入浅析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 Ajax的Get方式时需要注意URL地方
Apr 07 Javascript
鼠标滑上去后图片放大浮出效果的js代码
May 28 Javascript
js与C#进行时间戳转换
Nov 14 Javascript
JavaScript插件化开发教程 (四)
Jan 27 Javascript
jquery捕捉回车键及获取checkbox值与异步请求的方法
Dec 24 Javascript
全面介绍javascript实用技巧及单竖杠
Jul 18 Javascript
微信小程序 input输入框控件详解及实例(多种示例)
Dec 14 Javascript
详解js的延迟对象、跨域、模板引擎、弹出层、AJAX【附实例下载】
Dec 19 Javascript
从零学习node.js之模块规范(一)
Feb 21 Javascript
JS数组交集、并集、差集的示例代码
Aug 23 Javascript
vue加载完成后的回调函数方法
Sep 07 Javascript
在vue中使用回调函数,this调用无效的解决
Aug 11 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中通过Ajax如何实现异步文件上传的代码实例
2011/05/07 PHP
深入apache配置文件httpd.conf的部分参数说明
2013/06/28 PHP
表单提交时自动复制内容到剪贴板的js代码
2007/03/16 Javascript
PNG背景在不同浏览器下的应用
2009/06/22 Javascript
理解Javascript_01_理解内存分配原理分析
2010/10/11 Javascript
Javascript实现视频轮播在pc端与移动端均可
2013/09/29 Javascript
JavaScript实现仿网易通行证表单验证
2015/05/25 Javascript
详解JavaScript对象序列化
2016/01/19 Javascript
JS学习之表格的排序简单实例
2016/05/16 Javascript
原生javascript 学习之js变量全面了解
2016/07/14 Javascript
Html中 IFrame的用法及注意点
2016/12/22 Javascript
微信小程序-滚动消息通知的实例代码
2017/08/03 Javascript
基于Vuex无法观察到值变化的解决方法
2018/03/01 Javascript
ElementUI多个子组件表单的校验管理实现
2019/11/07 Javascript
React实现todolist功能
2020/12/28 Javascript
python将字符串转换成数组的方法
2015/04/29 Python
Python正则表达式完全指南
2017/05/25 Python
Python实现MySQL操作的方法小结【安装,连接,增删改查等】
2017/07/12 Python
Python编程实现蚁群算法详解
2017/11/13 Python
python中多层嵌套列表的拆分方法
2018/07/02 Python
解决pycharm的Python console不能调试当前程序的问题
2019/01/20 Python
Python将string转换到float的实例方法
2019/07/29 Python
Selenium常见异常解析及解决方案示范
2020/04/10 Python
简单了解python shutil模块原理及使用方法
2020/04/28 Python
获取python运行输出的数据并解析存为dataFrame实例
2020/07/07 Python
使用Python爬取Json数据的示例代码
2020/12/07 Python
快速创建 HTML5 Canvas 电信网络拓扑图的示例代码
2018/03/21 HTML / CSS
意大利奢华内衣制造商:Cosabella
2017/08/29 全球购物
澳大利亚在线批发商:Simply Wholesale
2021/02/24 全球购物
当我正在为表建立索引的时候,SQL Server 会禁止对表的访问吗
2014/04/28 面试题
《一株紫丁香》教学反思
2014/02/19 职场文书
大学自主招生推荐信
2014/05/10 职场文书
加强干部作风建设整改方案
2014/10/24 职场文书
自我检讨书范文
2015/01/28 职场文书
2015年学生会个人工作总结
2015/04/09 职场文书
党员观看《筑梦中国》心得体会
2016/01/18 职场文书