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 相关文章推荐
JavaScript调用Activex控件的事件的实现方法
Apr 11 Javascript
来自国外的30个基于jquery的Web下拉菜单
Jun 22 Javascript
jQuery lazyLoad图片延迟加载插件的优化改造方法分享
Aug 13 Javascript
使用Chrome浏览器调试AngularJS应用的方法
Jun 18 Javascript
RequireJS入门一之实现第一个例子
Sep 30 Javascript
jQuery实现简易的天天爱消除小游戏
Oct 16 Javascript
JavaScript模版引擎的基本实现方法浅析
Feb 15 Javascript
轻松掌握JavaScript装饰者模式
Aug 27 Javascript
解决layui 复选框等内置控件不显示的问题
Aug 14 Javascript
vue项目中在外部js文件中直接调用vue实例的方法比如说this
Apr 28 Javascript
vue实现中部导航栏布局功能
Jul 30 Javascript
JavaScript缓动动画函数的封装方法
Nov 25 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
使用PHP维护文件系统
2006/10/09 PHP
php getimagesize 上传图片的长度和宽度检测代码
2010/05/15 PHP
PHP以mysqli方式连接类完整代码实例
2014/07/15 PHP
PHP 多任务秒级定时器的实现方法
2018/05/13 PHP
Nigma vs Alliance BO5 第一场2.14
2021/03/10 DOTA
从javascript语言本身谈项目实战
2006/12/27 Javascript
jquery cookie插件代码类
2009/05/26 Javascript
jquery中获取元素的几种方式小结
2011/07/05 Javascript
js substr、substring和slice使用说明小记
2011/09/15 Javascript
javascript倒计时功能实现代码
2012/06/07 Javascript
JQuery中对Select的option项的添加、删除、取值
2013/08/25 Javascript
动态加载dtree.js树treeview(示例代码)
2013/12/17 Javascript
深入分析escape()、encodeURI()、encodeURIComponent()的区别及示例
2014/08/04 Javascript
简介JavaScript中的getUTCFullYear()方法的使用
2015/06/10 Javascript
javascript最基本的函数汇总
2015/06/25 Javascript
jQuery文本框得到与失去焦点动态改变样式效果
2016/09/08 Javascript
NodeJs项目中关闭ESLint的方法
2018/08/09 NodeJs
Nuxt.js SSR与权限验证的实现
2018/11/21 Javascript
JS数组Object.keys()方法的使用示例
2019/06/05 Javascript
vue 解决setTimeOut和setInterval函数无效报错的问题
2020/07/30 Javascript
Python实现获取汉字偏旁部首的方法示例【测试可用】
2018/12/18 Python
Python格式化字符串f-string概览(小结)
2019/06/18 Python
Python流程控制语句的深入讲解
2020/06/15 Python
基于HTML5 Canvas的3D动态Chart图表的示例
2017/11/02 HTML / CSS
N:Philanthropy官网:美国洛杉矶基础款服装
2020/06/09 全球购物
家教广告词
2014/03/19 职场文书
演讲稿格式范文
2014/05/19 职场文书
公司应聘自荐书
2014/06/14 职场文书
公司委托书格式
2014/08/01 职场文书
门面房租房协议书
2014/08/20 职场文书
天那边观后感
2015/06/09 职场文书
2016春季小学开学寄语
2015/12/03 职场文书
HR在给员工开具离职证明时,需要注意哪些问题?
2019/07/03 职场文书
JS Object构造函数之Object.freeze
2021/04/28 Javascript
Elasticsearch 配置详解
2022/04/19 Java/Android
springboot集成redis存对象乱码的问题及解决
2022/06/16 Java/Android