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 相关文章推荐
对setInterval在火狐和chrome切换标签产生奇怪的效果之探索,与解决方案!
Oct 29 Javascript
jquery.post用法示例代码
Jan 03 Javascript
js 去除字符串第一位逗号的方法
Jun 07 Javascript
跟我学习javascript创建对象(类)的8种方法
Nov 20 Javascript
jquery实现简单文字提示效果
Dec 02 Javascript
Node.js静态文件服务器改进版
Jan 10 Javascript
Ztree新增角色和编辑角色回显问题的解决
Oct 25 Javascript
解析vue中的$mount
Dec 21 Javascript
浅谈微信页面入口文件被缓存解决方案
Sep 29 Javascript
JavaScript使用Math.random()生成简单的验证码
Jan 21 Javascript
jQuery 动态粒子效果示例代码
Jul 07 jQuery
如何利用vue实现波谱拟合详解
Nov 05 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! 5.0.0论坛程序中加入一段js代码,让会员点击下载附件前自动弹出提示窗口
2007/04/18 PHP
Drupal 添加模块出现莫名其妙的错误的解决方法(往往出现在模块较多时)
2011/04/18 PHP
用Greasemonkey 脚本收藏网站会员信息到本地
2009/10/26 Javascript
JS解决ie6下png透明的方法实例
2013/08/02 Javascript
Ext JS 4实现带week(星期)的日期选择控件(实战一)
2013/08/21 Javascript
javascript history对象(历史记录)使用方法(实现浏览器前进后退)
2014/01/07 Javascript
Nodejs中读取中文文件编码问题、发送邮件和定时任务实例
2015/01/01 NodeJs
select自定义小三角样式代码(实用总结)
2017/08/18 Javascript
什么是Vue.js框架 为什么选择它?
2017/10/17 Javascript
详解html-webpack-plugin用法全解
2018/01/22 Javascript
关于Google发布的JavaScript代码规范你要知道哪些
2018/04/04 Javascript
vue-router中scrollBehavior的巧妙用法
2018/07/09 Javascript
移动端底部导航固定配合vue-router实现组件切换功能
2019/06/13 Javascript
vuex + keep-alive实现tab标签页面缓存功能
2019/10/17 Javascript
vue-router之实现导航切换过渡动画效果
2019/10/31 Javascript
Python中的jquery PyQuery库使用小结
2014/05/13 Python
Python的Django框架中的URL配置与松耦合
2015/07/15 Python
python中import学习备忘笔记
2017/01/24 Python
详解supervisor使用教程
2017/11/21 Python
python 字典中取值的两种方法小结
2018/08/02 Python
Python3中内置类型bytes和str用法及byte和string之间各种编码转换 问题
2018/09/27 Python
利用python修改json文件的value方法
2018/12/31 Python
用Cython加速Python到“起飞”(推荐)
2019/08/01 Python
详解Django关于StreamingHttpResponse与FileResponse文件下载的最优方法
2021/01/07 Python
CSS3伪类选择器:nth-child()
2009/04/02 HTML / CSS
CSS改变网页中鼠标选中文字背景颜色例子
2014/04/23 HTML / CSS
HTML5中的拖放实现详解
2017/08/23 HTML / CSS
德国内衣、泳装和睡衣网上商店:Bigsize Dessous
2018/07/09 全球购物
巴西化妆品商店:Lojas Rede
2019/07/26 全球购物
对照四风自我剖析材料
2014/10/07 职场文书
2014年英语教师工作总结
2014/12/03 职场文书
培训讲师开场白
2015/06/01 职场文书
电影小兵张嘎观后感
2015/06/03 职场文书
力克胡哲观后感
2015/06/10 职场文书
CSS中Single Div 绘图技巧的实现
2021/06/18 HTML / CSS
前端框架ECharts dataset对数据可视化的高级管理
2022/12/24 Javascript