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 相关文章推荐
js 提交和设置表单的值
Dec 19 Javascript
javascript数据类型验证方法
Dec 31 Javascript
基于javascript实现按圆形排列DIV元素(三)
Dec 02 Javascript
jQuery向webApi提交post json数据
Jan 16 Javascript
javascript 数据存储的常用函数总结
Jun 01 Javascript
vue使用mint-ui实现下拉刷新和无限滚动的示例代码
Nov 06 Javascript
JavaScript中var、let、const区别浅析
Jun 24 Javascript
vue安装遇到的5个报错及解决方法
Jun 12 Javascript
javascript执行上下文、变量对象实例分析
Apr 25 Javascript
uni-app微信小程序登录授权的实现
May 22 Javascript
vue中解决拖拽改变存在iframe的div大小时卡顿问题
Jul 22 Javascript
vue制作toast组件npm包示例代码
Oct 29 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
Discuz!X中SESSION机制实例详解
2015/09/23 PHP
php安装ssh2扩展的方法【Linux平台】
2016/07/20 PHP
PHP写的简单数字验证码实例
2017/05/23 PHP
PHP7 弃用功能
2021/03/09 PHP
jquery中focus()函数实现当对象获得焦点后自动把光标移到内容最后
2013/09/29 Javascript
Javascript设置对象的ReadOnly属性(示例代码)
2013/12/25 Javascript
JavaScript设置获取和设置属性的方法
2015/03/04 Javascript
基于jQuery倒计时插件实现团购秒杀效果
2016/05/13 Javascript
jQuery EasyUI框架中的Datagrid数据表格组件结构详解
2016/06/09 Javascript
Document.body.scrollTop的值总为零的快速解决办法
2016/06/09 Javascript
手机端js和html5刮刮卡效果
2020/09/29 Javascript
在 Node.js 中使用 async 函数的方法
2017/11/17 Javascript
vue移动端轻量级的轮播组件实现代码
2018/07/12 Javascript
Angular angular-file-upload文件上传的示例代码
2018/08/23 Javascript
vue中组件通信的八种方式(值得收藏!)
2019/08/09 Javascript
Vue优化:常见会导致内存泄漏问题及优化详解
2020/08/04 Javascript
浅谈对yield的初步理解
2017/05/29 Python
tensorflow1.0学习之模型的保存与恢复(Saver)
2018/04/23 Python
python中协程实现TCP连接的实例分析
2018/10/14 Python
PyQt 实现使窗口中的元素跟随窗口大小的变化而变化
2019/06/18 Python
django 捕获异常和日志系统过程详解
2019/07/18 Python
python返回数组的索引实例
2019/11/28 Python
Keras框架中的epoch、bacth、batch size、iteration使用介绍
2020/06/10 Python
Python urllib3软件包的使用说明
2020/11/18 Python
eDreams加拿大:廉价航班、酒店和度假
2019/03/29 全球购物
IMPORT的选项IGNORE有什么作用?缺省是什么设置?
2015/09/17 面试题
广州足迹信息技术有限公司Java软件工程师试题
2014/02/15 面试题
信号量和自旋锁的区别?如何选择使用?
2015/09/08 面试题
Ruby如何进行文件操作
2014/07/17 面试题
Java软件工程师综合面试题笔试题
2013/09/08 面试题
药学专业个人的自我评价
2013/12/31 职场文书
团队精神的演讲稿
2014/05/14 职场文书
丧事答谢词
2015/01/05 职场文书
社会实践心得体会范文
2016/01/14 职场文书
Python初学者必备的文件读写指南
2021/06/23 Python
vue使用echarts实现折线图
2022/03/21 Vue.js