深入浅析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的试卷自动排版系统实现代码
Jan 06 Javascript
setTimeout和setInterval的区别你真的了解吗?
Mar 31 Javascript
鼠标移到导航当前位置的LI变色处于选中状态
Aug 23 Javascript
解析URI与URL之间的区别与联系
Nov 22 Javascript
js实现背景图片感应鼠标变化的方法
Feb 28 Javascript
JavaScript如何实现组合列表框中元素移动效果
Mar 01 Javascript
全面了解函数声明与函数表达式、变量提升
Aug 09 Javascript
浅谈js获取ModelAndView值的问题
Mar 28 Javascript
一个基于react的图片裁剪组件示例
Apr 18 Javascript
说说node中的可读流和可写流的区别
Jun 01 Javascript
Puppeteer环境搭建的详细步骤
Sep 21 Javascript
JavaScript继承与聚合实例详解
Jan 22 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 文章采集正则代码
2009/12/28 PHP
PHP处理SQL脚本文件导入到MySQL的代码实例
2014/03/17 PHP
php实现读取超大文件的方法
2014/07/28 PHP
PHP中大于2038年时间戳的问题处理方案
2015/03/03 PHP
让innerHTML的脚本也可以运行起来
2006/07/01 Javascript
Extjs学习笔记之一 初识Extjs之MessageBox
2010/01/07 Javascript
VBS通过WMI监视注册表变动的代码
2011/10/27 Javascript
关于div自适应高度/左右高度自适应一致的js代码
2013/03/22 Javascript
JS+CSS实现简易的滑动门效果代码
2015/09/24 Javascript
Spring mvc 接收json对象
2015/12/10 Javascript
JS实现合并两个数组并去除重复项只留一个的方法
2015/12/17 Javascript
TypeScript Type Innference(类型判断)
2016/03/10 Javascript
jQuery解决input元素的blur事件和其他非表单元素的click事件冲突问题
2016/08/15 Javascript
vue.js 表格分页ajax 异步加载数据
2016/10/18 Javascript
微信小程序 radio单选框组件详解及实例代码
2017/01/10 Javascript
jquery学习笔记之无new构建详解
2017/12/07 jQuery
vue单页开发父子组件传值思路详解
2018/05/18 Javascript
Nginx设置为Node.js的前端服务器方法总结
2019/03/27 Javascript
Vue组件通信的几种实现方法
2019/04/25 Javascript
JS数组push、unshift、pop、shift方法的实现与使用方法示例
2020/04/29 Javascript
浅谈python中列表、字符串、字典的常用操作
2017/09/19 Python
Django使用AJAX调用自己写的API接口的方法
2019/03/06 Python
Django框架视图函数设计示例
2019/07/29 Python
详解numpy矩阵的创建与数据类型
2019/10/18 Python
Django 项目通过加载不同env文件来区分不同环境
2020/02/17 Python
使用Python将语音转换为文本的方法
2020/08/10 Python
Gap中国官网:美式休闲风服饰
2017/02/05 全球购物
Charlotte Tilbury英国官网:英国彩妆品牌
2017/05/26 全球购物
Groupon比利时官方网站:特卖和网上购物高达-70%
2019/08/09 全球购物
旅游管理专业学生求职信
2013/09/28 职场文书
捐款倡议书范文
2014/02/02 职场文书
机械制造专业毕业生求职信
2014/03/02 职场文书
学校学习雷锋活动总结
2014/07/03 职场文书
学习焦裕禄观后感
2015/06/09 职场文书
python实现监听键盘
2021/04/26 Python
详细聊一聊mysql的树形结构存储以及查询
2022/04/05 MySQL