js arguments,jcallee caller用法总结


Posted in Javascript onNovember 30, 2013

关键字:arguments,callee,caller
arguments:表示传入函数的参数
callee:表示函数和函数主体的语句
caller:表示调用该函数的函数

arguments

该对象代表正在执行的函数和调用它的函数的参数。

caller

返回一个对函数的引用,该函数调用了当前函数。
functionName.caller
functionName 对象是所执行函数的名称。

说明
对于函数来说,caller属性只有在函数执行时才有定义。如果函数是由顶层调用的,那么 caller包含的就是 null 。如果在字符串上下文中使用 caller 属性,那么结果和functionName.toString一样,也就是说,显示的是函数的反编译文本。

callee

返回正被执行的 Function 对象,也就是所指定的Function 对象的正文。

[function.]arguments.callee

可选项 function 参数是当前正在执行的 Function 对象的名称。

说明

callee 属性的初始值就是正被执行的 Function 对象。

callee 属性是 arguments对象的一个成员,它表示对函数对象本身的引用,这有利于匿名函数的递归或者保证函数的封装性,例如下边示例的递归计算1到n的自然数之和。而该属性仅当相关函数正在执行时才可用。还有需要注意的是callee拥有length属性,这个属性有时候用于验证还是比较好的。arguments.length是实参长度,arguments.callee.length是形参长度,由此可以判断调用时形参长度是否和实参长度一致。

<script type='text/javascript'>
function test(x,y,z) 
{ 
alert("实参长度:"+arguments.length);
alert("形参长度:"+arguments.callee.length);
alert("形参长度:"+test.length);
alert(arguments[ 0 ])         
alert(test[ 0 ])           // undefined 没有这种用法
}
//test(1,2,3); 
test(1,2,3,4);
/*
*  arguments不是数组(Array类)
*/
Array.prototype.selfvalue  =   1 ;
function  testAguments() {
    alert( " arguments.selfvalue= " + arguments.selfvalue);
}
alert("Array.sefvalue="+new Array().selfvalue);
testAguments();
/**/ /*
 * 演示函数的caller属性.
 * 说明:(当前函数).caller:返回一个对函数的引用,该函数调用了当前函数
  */
function  callerDemo()  {
     if  (callerDemo.caller)  {
         var  a =  callerDemo.caller.arguments[ 0 ];
        alert(a);
    }   else   {
        alert( " this is a top function " );
    }
}
function  handleCaller()  {
    callerDemo();
}
 callerDemo();
 handleCaller("参数1","参数2");

/**/ /*
 * 演示函数的callee属性.
 * 说明:arguments.callee:初始值就是正被执行的 Function 对象,用于匿名函数
  */
function  calleeDemo()  {
    alert(arguments.callee);
}
 calleeDemo();
 (function(arg0,arg1){alert("形数数目为:"+arguments.callee.length)})();

/**/ /*
 * 演示apply,call函数的用法
 * 说明:作用都是将函数绑定到另外一个对象上去运行,两者仅在定义参数方式有所区别:
 *       apply(thisArg,argArray);
 *     call(thisArg[,arg1,arg2…] ]);
 *     即所有函数内部的this指针都会被赋值为thisArg
  */
  function  ObjectA() {
    alert( " 执行ObjectA() " );
    alert(arguments[ 0 ]);
     this .hit = function (msg) {alert(msg)}
     this .info = " 我来自ObjectA "
 }
  function  ObjectB() {
    alert( " 执行ObjectB() " );
     // 调用ObjectA()方法,同时ObjectA构造函数中的所有this就会被ObjectB中的this替代
    ObjectA.apply( this ,arguments); // ObjectA.call(this);
    alert( this .info);
 }
  ObjectB('参数0');

  var  value = " global 变量 " ;
  function  Obj() {
     this .value = " 对象! " ;
 }
  function  Fun1() {
    alert( this .value);
 }
   Fun1();
   Fun1.apply(window); 
   Fun1.apply(new Obj());
</script>
Javascript 相关文章推荐
jquery.validate使用攻略 第三部
Jul 01 Javascript
js 金额文本框实现代码
Feb 14 Javascript
javascript匀速动画和缓冲动画详解
Oct 20 Javascript
JavaScript自动点击链接 防止绕过浏览器访问的方法
Jan 19 Javascript
JS优化与惰性载入函数实例分析
Apr 06 Javascript
vue实现长图垂直居上 vue实现短图垂直居中
Oct 18 Javascript
AngularJS监听ng-repeat渲染完成的两种方法
Jan 16 Javascript
CKeditor4 字体颜色功能配置方法教程
Jun 26 Javascript
Vue替代marquee标签超出宽度文字横向滚动效果
Dec 09 Javascript
Vue项目vscode 安装eslint插件的方法(代码自动修复)
Apr 15 Javascript
vue 获取元素额外生成的data-v-xxx操作
Sep 09 Javascript
Javascript异步流程控制之串行执行详解
Sep 27 Javascript
js中arguments的用法(实例讲解)
Nov 30 #Javascript
JavaScript中的undefined学习总结
Nov 30 #Javascript
浅析JavaScript中的typeof运算符
Nov 30 #Javascript
浅析JavaScript中的delete运算符
Nov 30 #Javascript
jquery easyui combobox模糊过滤(示例代码)
Nov 30 #Javascript
浅析offsetLeft,Left,clientLeft之间的区别
Nov 30 #Javascript
jQuery之过滤元素操作小结
Nov 30 #Javascript
You might like
DC动画很好看?新作烂得令人发指,名叫《红色之子》
2020/04/09 欧美动漫
服务器端解压缩zip的脚本
2006/12/22 PHP
PHP中round()函数对浮点数进行四舍五入的方法
2014/11/19 PHP
PHP输出一个等腰三角形的方法
2015/05/12 PHP
PHP filesize函数用法浅析
2019/02/15 PHP
Laravel统计一段时间间隔的数据方法
2019/10/09 PHP
解决Laravel5.x的php artisan migrate数据库迁移创建操作报错SQLSTATE[42000]
2020/04/06 PHP
获取Javscript执行函数名称的方法
2006/12/22 Javascript
js 图片轮播(5张图片)
2008/12/30 Javascript
javascript 循环调用示例介绍
2013/11/20 Javascript
Js获取下拉框选定项的值和文本的实现代码
2014/02/26 Javascript
JQuery 在线引用及测试引用是否成功
2014/06/24 Javascript
jQuery实现拖拽效果插件的方法
2015/03/23 Javascript
jquery实现简单的自动播放幻灯片效果
2015/06/13 Javascript
JS实现的自定义网页拖动类
2015/11/06 Javascript
基于JS如何实现给字符加千分符(65,541,694,158)
2016/08/03 Javascript
基于JS实现限时抢购倒计时间表代码
2017/05/09 Javascript
js移动端图片压缩上传功能
2020/08/18 Javascript
web3.js增加eth.getRawTransactionByHash(txhash)方法步骤
2018/03/15 Javascript
mpvue构建小程序的方法(步骤+地址)
2018/05/22 Javascript
Bootstrap导航菜单点击后无法自动添加active的处理方法
2018/08/10 Javascript
JavaScript设计模式之享元模式实例详解
2019/01/17 Javascript
从零开始在vue-cli4配置自适应vw布局的实现
2020/06/08 Javascript
Python文件操作基本流程代码实例
2017/12/11 Python
解决Django layui {{}}冲突的问题
2019/08/29 Python
Python使用monkey.patch_all()解决协程阻塞问题
2020/04/15 Python
使用Python制作一盏 3D 花灯喜迎元宵佳节
2021/02/26 Python
Sneaker Studio法国:购买运动鞋
2018/06/08 全球购物
职工运动会邀请函
2014/01/19 职场文书
优秀志愿者事迹材料
2014/02/03 职场文书
父母对孩子的寄语
2014/04/09 职场文书
学校政风行风评议心得体会
2014/10/21 职场文书
《爱的教育》读书心得
2014/11/08 职场文书
军训后的感想
2015/08/07 职场文书
商场广播稿范文
2015/08/19 职场文书
分享一些Java的常用工具
2021/06/11 Java/Android