深入浅析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 CSS修改学习第五章 给“上传”添加样式
Feb 19 Javascript
JQuery 选择器、过滤器介绍
Feb 14 Javascript
jQuery中:text选择器用法实例
Jan 03 Javascript
常用DOM整理
Jun 16 Javascript
聊一聊JavaScript作用域和作用域链
May 03 Javascript
实例讲解JavaScript的Backbone.js框架中的View视图
May 05 Javascript
jQuery实现6位数字密码输入框
Dec 29 Javascript
原生js实现可拖动的登录框效果
Jan 21 Javascript
360doc网站不登录就无法复制内容的解决方法
Jan 27 Javascript
vue计算属性get和set用法示例
Feb 08 Javascript
ES6使用 Array.includes 处理多重条件用法实例分析
Mar 02 Javascript
vue中data改变后让视图同步更新的方法
Mar 29 Vue.js
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+MYSQL 出现乱码的解决方法
2008/08/08 PHP
PHP判断一个数组是另一个数组子集的方法详解
2017/07/31 PHP
javascript RadioButtonList获取选中值
2009/04/09 Javascript
表格 隔行换色升级版
2009/11/07 Javascript
新鲜出炉的js tips提示效果
2011/04/03 Javascript
基于jQuery+HttpHandler实现图片裁剪效果代码(适用于论坛, SNS)
2011/09/02 Javascript
浅谈js中的闭包
2015/03/16 Javascript
Jquery常用的方法汇总
2015/09/01 Javascript
Javascript类型系统之String字符串类型详解
2016/06/21 Javascript
EasyUI中在表单提交之前进行验证
2016/07/19 Javascript
AngularJs bootstrap搭载前台框架——js控制部分
2016/09/01 Javascript
详解Vue组件实现tips的总结
2017/11/01 Javascript
fullpage.js最后一屏滚动方式
2018/02/06 Javascript
原生JS+HTML5实现跟随鼠标一起流动的粒子动画效果
2018/05/03 Javascript
微信小程序实现留言板
2018/10/31 Javascript
Vue组件通信的几种实现方法
2019/04/25 Javascript
Electron vue的使用教程图文详解
2019/07/05 Javascript
vue搜索页开发实例代码详解(热门搜索,历史搜索,淘宝接口演示)
2020/04/11 Javascript
vue router返回到指定的路由的场景分析
2020/11/10 Javascript
vue使用transition组件动画效果的实例代码
2021/01/28 Vue.js
[02:44]DOTA2英雄基础教程 钢背兽
2013/12/19 DOTA
python发腾讯微博代码分享
2014/01/10 Python
python获得图片base64编码示例
2014/01/16 Python
讲解Python中if语句的嵌套用法
2015/05/14 Python
python实现俄罗斯方块
2018/06/26 Python
TensorFLow 变量命名空间实例
2020/02/11 Python
Python捕获异常堆栈信息的几种方法(小结)
2020/05/18 Python
做一个能自适应高度的textarea的示例代码
2019/09/06 HTML / CSS
创意爱尔兰礼物:Creative Irish Gifts
2020/01/29 全球购物
求职毕业生自荐书
2014/02/08 职场文书
网管求职信
2014/03/03 职场文书
庆祝新中国成立65周年“向国旗敬礼”网上签名寄语
2014/09/27 职场文书
MySQL修改默认引擎和字符集详情
2021/09/25 MySQL
Apache Pulsar集群搭建部署详细过程
2022/02/12 Servers
MySQL中一条SQL查询语句是如何执行的
2022/04/08 MySQL
MySQL外键约束(Foreign Key)案例详解
2022/06/28 MySQL