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 遍历json数组的实现代码
Sep 22 Javascript
js浮动图片的动态效果
Jul 10 Javascript
javascript文本框内输入文字倒计数的方法
Feb 24 Javascript
js检测用户输入密码强度
Oct 22 Javascript
javascript常用函数(1)
Nov 04 Javascript
基于JavaScript操作DOM常用的API小结
Dec 01 Javascript
BootStrap便签页的简单应用
Jan 06 Javascript
mui上拉加载功能实例详解
Apr 13 Javascript
详解如何将angular-ui的图片轮播组件封装成一个指令
May 09 Javascript
Vue项目中quill-editor带样式编辑器的使用方法
Aug 08 Javascript
基于Node.js搭建hexo博客过程详解
Jun 25 Javascript
json解析大全 双引号、键值对不在一起的情况
Dec 06 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动态生成JavaScript代码
2009/03/09 PHP
用php简单实现加减乘除计算器
2014/01/06 PHP
php读取文件内容到数组的方法
2015/03/16 PHP
php通过array_unshift函数添加多个变量到数组前端的方法
2015/03/18 PHP
PHP远程调试之XDEBUG
2015/12/29 PHP
Ubuntu彻底删除PHP7.0的方法
2018/07/27 PHP
PHP使用XMLWriter读写xml文件操作详解
2018/07/31 PHP
javascript 循环读取JSON数据的代码
2010/07/17 Javascript
滚动图片效果 jquery实现回旋滚动效果
2013/01/08 Javascript
js使用数组判断提交数据是否存在相同数据
2013/11/27 Javascript
判断JS对象是否拥有某种属性的两种方式
2013/12/02 Javascript
JavaScript编程中布尔对象的基本使用
2015/10/25 Javascript
Bootstrap每天必学之导航条(二)
2016/03/01 Javascript
jquery mobile界面数据刷新的实现方法
2016/05/28 Javascript
jQuery中的select操作详解
2016/11/29 Javascript
老生常谈jquery id选择器和class选择器的区别
2017/02/12 Javascript
javascript设计模式之模块模式学习笔记
2017/02/15 Javascript
jquery中$.fn和图片滚动效果实现的必备知识总结
2017/04/21 jQuery
Express + Node.js实现登录拦截器的实例代码
2017/07/01 Javascript
node.js express框架简介与实现
2019/07/23 Javascript
用Python进行行为驱动开发的入门教程
2015/04/23 Python
浅谈Django学习migrate和makemigrations的差别
2018/01/18 Python
Python学习小技巧总结
2018/06/10 Python
Python获取好友地区分布及好友性别分布情况代码详解
2019/07/10 Python
python使用原始套接字发送二层包(链路层帧)的方法
2019/07/22 Python
举例讲解Python装饰器
2020/12/24 Python
美国高品质个性化珠宝销售网站:Jewlr
2018/05/03 全球购物
The North Face北面荷兰官网:美国著名户外品牌
2019/10/16 全球购物
英国第一独立滑雪板商店:The Snowboard Asylum
2020/01/16 全球购物
函授自我鉴定
2013/11/06 职场文书
大学新生军训自我鉴定
2014/09/18 职场文书
2015年信贷员工作总结
2015/04/28 职场文书
师范生见习总结范文
2015/06/23 职场文书
《最后一头战象》读后感:动物也有感情
2020/01/02 职场文书
使用numpy实现矩阵的翻转(flip)与旋转
2021/06/03 Python
能用CSS实现的就不要麻烦JavaScript了
2021/10/05 HTML / CSS