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 相关文章推荐
IE DOM实现存在的部分问题及解决方法
Jul 25 Javascript
javascript 支持链式调用的异步调用框架Async.Operation
Aug 04 Javascript
js 利用image对象实现图片的预加载提高访问速度
Mar 29 Javascript
JS 获取select(多选下拉)中所选值的示例代码
Aug 02 Javascript
Js实现当前点击a标签变色突出显示其他a标签回复原色
Nov 27 Javascript
Egret引擎开发指南之运行项目
Sep 03 Javascript
JavaScript中的闭包(Closure)详细介绍
Dec 30 Javascript
JSON简介以及用法汇总
Feb 21 Javascript
JavaScript数据结构之广义表的定义与表示方法详解
Apr 12 Javascript
原生JS实现的自动轮播图功能详解
Dec 28 Javascript
JS关闭子窗口并且刷新上一个窗口的实现示例
Mar 10 Javascript
微信小程序中wxs文件的一些妙用分享
Feb 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中创建并处理图象
2006/10/09 PHP
使用PHP会话(Session)实现用户登陆功能
2013/06/29 PHP
PHP实现的通过参数生成MYSQL语句类完整实例
2016/04/11 PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
Mootools 1.2教程 Tooltips
2009/09/15 Javascript
COM中获取JavaScript数组大小的代码
2009/11/22 Javascript
在javascript中关于节点内容加强
2013/04/11 Javascript
jquery 鼠标滑动显示详情应用示例
2014/01/24 Javascript
JQuery 控制内容长度超出规定长度显示省略号
2014/05/23 Javascript
使用jquery解析XML示例代码
2014/09/05 Javascript
jQuery使用$.get()方法从服务器文件载入数据实例
2015/03/25 Javascript
Json解析的方法小结
2016/06/22 Javascript
AngularJS使用Filter自定义过滤器控制ng-repeat去除重复功能示例
2018/04/21 Javascript
H5+C3+JS实现五子棋游戏(AI篇)
2020/05/28 Javascript
JavaScript进阶(四)原型与原型链用法实例分析
2020/05/09 Javascript
Object.keys() 和 Object.getOwnPropertyNames() 的区别详解
2020/05/21 Javascript
基于JavaScript的数据结构队列动画实现示例解析
2020/08/06 Javascript
Javascript表单序列化原理及实现代码详解
2020/10/30 Javascript
vue登录页实现使用cookie记住7天密码功能的方法
2021/02/18 Vue.js
利用Python开发实现简单的记事本
2016/11/15 Python
Python 调用Java实例详解
2017/06/02 Python
css3实现画半圆弧线的示例代码
2017/11/06 HTML / CSS
HTML5+lufylegend实现游戏中的卷轴
2016/02/29 HTML / CSS
丝芙兰美国官网:SEPHORA美国
2016/08/03 全球购物
Russell Stover巧克力官方网站:美国领先的精美巧克力制造商
2016/11/27 全球购物
马来西亚在线购物市场:PGMall.my
2019/10/13 全球购物
Java面试中常遇到的问题,也是需要注意的几点
2013/08/30 面试题
JAVA代码查错题
2014/10/10 面试题
保安的辞职报告怎么写
2014/01/20 职场文书
水电工岗位职责
2014/02/12 职场文书
建房协议书
2014/04/11 职场文书
2014年财务工作自我评价
2014/09/23 职场文书
2015年妇产科工作总结
2015/05/18 职场文书
浅谈react useEffect闭包的坑
2021/06/08 Javascript
python的列表生成式,生成器和generator对象你了解吗
2022/03/16 Python
win11高清晰音频管理器在哪里?win11找不到高清晰音频管理器解决办法
2022/04/08 数码科技