深入浅析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 判断页面元素是否存在的代码
Aug 14 Javascript
Javascript实现仿WebQQ界面的“浮云”兼容 IE7以上版本及FF
Apr 27 Javascript
JS中的substring和substr函数的区别说明
May 07 Javascript
实现隔行换色效果的两种方式【实用】
Nov 27 Javascript
jQuery插件ContextMenu自定义图标
Mar 15 Javascript
vue axios 二次封装的示例代码
Dec 08 Javascript
使用Vue开发自己的Chrome扩展程序过程详解
Jun 21 Javascript
JS/CSS实现字符串单词首字母大写功能
Sep 03 Javascript
vue 使用外部JS与调用原生API操作示例
Dec 02 Javascript
Vue实现简易计算器
Feb 25 Javascript
es6函数中的作用域实例分析
Apr 18 Javascript
浅谈vue中get请求解决传输数据是数组格式的问题
Aug 03 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
使用网络地址转换实现多服务器负载均衡
2006/10/09 PHP
Laravel5.1数据库连接、创建数据库、创建model及创建控制器的方法
2016/03/29 PHP
Zend Framework教程之Zend_Helpers动作助手ViewRenderer用法详解
2016/07/20 PHP
CodeIgniter框架常见用法工作总结
2017/03/16 PHP
jquery 面包屑导航 具体实现
2013/06/05 Javascript
JavaScript将字符串转换成字符编码列表的方法
2015/03/19 Javascript
javascript实现选中复选框后相关输入框变灰不可用的方法
2015/08/11 Javascript
关于事件mouseover ,mouseout ,mouseenter,mouseleave的区别
2015/10/12 Javascript
详解javascript数组去重问题
2015/11/06 Javascript
jQuery和hwSlider实现内容响应式可触控滑动切换效果附源码下载(二)
2016/06/22 Javascript
浅谈jQuery效果函数
2016/09/16 Javascript
AngularJS 获取ng-repeat动态生成的ng-model值实例详解
2016/11/29 Javascript
JavaScript正则表达式校验与递归函数实际应用实例解析
2017/08/04 Javascript
vue通过路由实现页面刷新的方法
2018/01/25 Javascript
QRCode.js二维码生成并能长按识别
2018/10/16 Javascript
JavaScript中的全局属性与方法深入解析
2020/06/14 Javascript
JS实现无限轮播无倒退效果
2020/09/21 Javascript
在Django的模型中执行原始SQL查询的方法
2015/07/21 Python
解决python3 安装不了PIL的问题
2019/08/16 Python
Python callable内置函数原理解析
2020/03/05 Python
Jupyter Notebook远程登录及密码设置操作
2020/04/10 Python
python os模块在系统管理中的应用
2020/06/22 Python
Pytorch损失函数nn.NLLLoss2d()用法说明
2020/07/07 Python
html5使用canvas绘制太阳系效果
2014/12/15 HTML / CSS
世界上最大的乐谱选择:Sheet Music Plus
2020/01/18 全球购物
Discard Protocol抛弃协议的作用是什么
2015/10/10 面试题
软件缺陷的分类都有哪些
2014/08/22 面试题
请说出以下代码输出什么
2013/08/30 面试题
理工大学毕业生自荐信范文
2014/02/22 职场文书
文明生主要事迹
2014/05/25 职场文书
小学趣味运动会加油稿
2014/09/25 职场文书
关爱留守儿童主题班会
2015/08/13 职场文书
2016师德师风学习心得体会
2016/01/12 职场文书
我的暑假生活作文(五年级)范文
2019/08/07 职场文书
Nginx 502 Bad Gateway错误原因及解决方案
2021/03/31 Servers
Python Socket编程详解
2021/04/25 Python