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 DOM 操作实现代码
Aug 01 Javascript
javascript 事件处理程序介绍
Jun 27 Javascript
JS计算网页停留时间代码
Apr 28 Javascript
node.js中的path.resolve方法使用说明
Dec 08 Javascript
javascript操作ul中li的方法
May 14 Javascript
浅析BootStrap栅格系统
Jun 07 Javascript
利用JS屏蔽页面中的Enter按键提交表单的方法
Nov 25 Javascript
实现隔行换色效果的两种方式【实用】
Nov 27 Javascript
bootstrap组件之按钮式下拉菜单小结
Jan 19 Javascript
Vue 2.0+Vue-router构建一个简单的单页应用(附源码)
Mar 14 Javascript
JS中的三个循环小结
Jun 20 Javascript
深入理解 Koa 框架中间件原理
Oct 18 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 获取页面中指定内容的实现类
2014/01/23 PHP
php安装php_rar扩展实现rar文件读取和解压的方法
2016/11/17 PHP
Laravel源码解析之路由的使用和示例详解
2018/09/27 PHP
PhpStorm的使用教程(本地运行PHP+远程开发+快捷键)
2020/03/26 PHP
onpropertypchange
2006/07/01 Javascript
懒就要懒到底——鼠标自动点击(含时间判断)
2007/02/20 Javascript
从阿里妈妈发现的几个不错的表单验证函数
2007/09/21 Javascript
JQuery 拾色器插件发布-jquery.icolor.js
2010/10/20 Javascript
Chosen 基于jquery的选择框插件使用方法
2012/05/30 Javascript
JavaScript高级程序设计(第3版)学习笔记13 ECMAScript5新特性
2012/10/11 Javascript
动态的创建一个元素createElement及删除一个元素
2014/01/24 Javascript
Node.js中使用Buffer编码、解码二进制数据详解
2014/08/16 Javascript
javascript实现类似于新浪微博搜索框弹出效果的方法
2015/07/27 Javascript
解决一个微信号同时支持多个环境网页授权问题
2019/08/07 Javascript
vue element 生成无线级左侧菜单的实现代码
2019/08/21 Javascript
jquery实现直播弹幕效果
2019/11/28 jQuery
关于Python中空格字符串处理的技巧总结
2017/08/10 Python
Python实现将doc转化pdf格式文档的方法
2018/01/19 Python
python plotly绘制直方图实例详解
2019/07/22 Python
Python 静态方法和类方法实例分析
2019/11/21 Python
numpy按列连接两个维数不同的数组方式
2019/12/06 Python
python实现学生通讯录管理系统
2021/02/25 Python
解决img标签上下出现间隙的方法
2016/12/14 HTML / CSS
HTML5如何实现元素拖拽
2016/03/11 HTML / CSS
Canvas 文本转粒子效果的实现代码
2019/02/14 HTML / CSS
大都会艺术博物馆商店:The Met Store
2018/06/22 全球购物
哥德堡通行证:Gothenburg Pass
2019/12/09 全球购物
四川internet信息高速公路(C#)笔试题
2012/02/29 面试题
Ruby如何实现动态方法调用
2012/11/18 面试题
党校自我鉴定范文
2013/10/02 职场文书
爱国演讲稿500字
2014/05/04 职场文书
政府四风问题整改措施
2014/10/04 职场文书
2015元旦晚会主持人开场白+结束语
2014/12/14 职场文书
超搞笑婚前保证书
2015/05/08 职场文书
Python OpenCV 彩色与灰度图像的转换实现
2021/06/05 Python
《杜鹃的婚约》OP主题曲「凸凹」无字幕影像公开
2022/04/08 日漫