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 相关文章推荐
找出字符串中出现次数最多的字母和出现次数精简版
Nov 07 Javascript
用js代码改变单选框选中状态的简单实例
Dec 18 Javascript
node.js中的console.log方法使用说明
Dec 09 Javascript
JS实现可点击展开与关闭的左侧广告代码
Sep 02 Javascript
javascript中this指向详解
Apr 23 Javascript
仿百度换肤功能的简单实例代码
Jul 11 Javascript
angularjs实现文字上下无缝滚动特效代码
Sep 04 Javascript
原生JS和jQuery操作DOM对比总结
Jan 19 Javascript
vue2 如何实现div contenteditable=“true”(类似于v-model)的效果
Feb 08 Javascript
jQuery实现贪吃蛇小游戏(附源码下载)
Mar 04 Javascript
Vue在页面右上角实现可悬浮/隐藏的系统菜单
May 04 Javascript
JS中的算法与数据结构之链表(Linked-list)实例详解
Aug 20 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中如何判断AJAX提交的数据
2012/02/05 PHP
PHP多线程批量采集下载美女图片的实现代码(续)
2013/06/03 PHP
PDO::_construct讲解
2019/01/27 PHP
关于Javascript 的 prototype问题。
2007/01/03 Javascript
地震发生中逃生十大法则
2008/05/12 Javascript
jquery.AutoComplete.js中文修正版(支持firefox)
2010/04/09 Javascript
js变换显示图片的实例
2013/04/16 Javascript
模拟jQuery中的ready方法及实现按需加载css,js实例代码
2013/09/27 Javascript
jQuery 中DOM 操作详解
2015/01/13 Javascript
javascript中DOM复选框选择用法实例
2015/05/14 Javascript
Bootstrap每天必学之弹出框(Popover)插件
2016/04/25 Javascript
JS实现随机颜色的3种方法与颜色格式的转化
2017/01/05 Javascript
angularjs ocLazyLoad分步加载js文件实例
2017/01/17 Javascript
用js实现before和after伪类的样式修改的示例代码
2017/09/07 Javascript
Node.js实现发送邮件功能
2017/11/06 Javascript
js中的闭包学习心得
2018/02/06 Javascript
微信小程序如何实现全局重新加载
2019/06/05 Javascript
快速解决layui弹窗按enter键不停弹窗的问题
2019/09/18 Javascript
layui.tree组件的使用以及搜索节点功能的实现
2019/09/26 Javascript
vue实现编辑器键盘抬起时内容跟随光标距顶位置向上滚动效果
2020/05/28 Javascript
Eclipse + Python 的安装与配置流程
2013/03/05 Python
Python Tkinter基础控件用法
2014/09/03 Python
python刷投票的脚本实现代码
2014/11/08 Python
python实现flappy bird小游戏
2018/12/24 Python
python导入不同目录下的自定义模块过程解析
2019/11/18 Python
解决python cv2.imread 读取中文路径的图片返回为None的问题
2020/06/02 Python
解决Keras中循环使用K.ctc_decode内存不释放的问题
2020/06/29 Python
探索欧洲最好的品牌:Bombinate
2019/06/14 全球购物
日语系毕业生推荐信
2013/11/11 职场文书
升职自荐信
2013/11/28 职场文书
投标承诺书范本
2014/03/27 职场文书
医院合作协议书
2014/08/19 职场文书
食品委托检验协议书范本
2014/09/12 职场文书
营销计划书范文
2015/01/17 职场文书
redis 存储对象的方法对比分析
2021/08/02 Redis
PHP 时间处理类Carbon
2022/05/20 PHP