js caller和callee的详细介绍
来源:互联网 发布:按键精灵数组赋值 编辑:程序博客网 时间:2024/06/02 06:45
caller
返回一个对函数的引用,该函数调用了当前函数。
functionName.caller
functionName 对象是所执行函数的名称。
说明
对于函数来说,caller 属性只有在函数执行时才有定义。 如果函数是由 Javascript 程序的顶层调用的,那么 caller 包含的就是 null 。
下面的例子说明了 caller 属性的用法:
js 代码:
- function callerDemo() {
- if (arguments.caller) {
- var a = callerDemo.caller.toString();
- alert(a);
- } else {
- alert("this is a top function");
- }
- }
- function handleCaller() {
- callerDemo();
- }
- handleCaller();
- function calleeDemo() {
- alert(arguments.callee);
- }
- calleeDemo();
=====================================================================
callee
返回正被执行的 Function 对象,也就是所指定的 Function 对象的正文。
[function.]arguments.callee
可选项 function 参数是当前正在执行的 Function 对象的名称。
说明
callee 属性的初始值就是正被执行的 Function 对象。
callee 属性是 arguments 对象的一个成员,它表示对函数对象本身的引用,这有利于匿名函数的递归或者保证函数的封装性,例如下边示例的递归计算1到n的自然数之和。而该属性仅当相关函数正在执行时才可用。还有需要注意的是callee拥有length属性,这个属性有时候用于验证还是比较好的。arguments.length是实参长度,arguments.callee.length是形参长度,由此可以判断调用时形参长度是否和实参长度一致。
示例
js 代码:
- //callee可以打印其本身
- function calleeDemo() {
- alert(arguments.callee);
- }
- //用于验证参数
- function calleeLengthDemo(arg1, arg2) {
- if (arguments.length == arguments.callee.length) {
- window.alert("验证形参和实参长度正确!");
- return;
- } else {
- alert("实参长度:" + arguments.length);
- alert("形参长度: " + arguments.callee.length);
- }
- }
- //递归计算
- var sum = function (n) {
- if (n < = 0)
- return 1;
- else
- return n +arguments.callee(n - 1)
- }
比较一般的递归函数:
js 代码:
- var sum = function(n) {
- if (1 == n)
- return 1;
- else
- return n + sum(n - 1);
- }
调用时:alert(sum(100));
其中函数内部包含了对sum自身的引用,函数名仅仅是一个变量名,在函数内部调用sum即相当于调用
一个全局变量,不能很好的体现出是调用自身,这时使用callee会是一个比较好的方法。
博主补充——————————————————————
实现递归的方法还可以用call方法
var sum = function (n) { if (n < = 0) return 1; else return n +sum.call(this,n - 1)}
- js caller和callee的详细介绍
- js的caller和callee
- js caller 和callee的区别
- js中caller和callee的区别
- js callee和caller区别
- js中的caller和callee
- js中的caller和callee
- js arguments和caller,callee
- js中的callee和caller
- caller和callee的使用方法
- caller和callee的区别
- caller和callee的区别
- caller和callee的区别
- caller和callee的区别
- caller和callee的区别
- caller和callee的区别
- caller 和callee的区别
- caller和callee的区别
- iOS程序性能优化
- 汇编--学习笔记(十五)-总复习
- 仿网易云音乐MV的webapp
- 【尖端干货】星域CDN极速高清技术详解
- PHP 扩展开发(一)
- js caller和callee的详细介绍
- [Oracle] dbms_metadata.get_ddl 的使用方法总结
- 数据库连接池
- 【C/C++】从零开始的Make教程
- Linux curses库使用
- [深入浅出iOS库]之数据库 sqlite
- 像window 服务一样在web站点中执行任务
- 导出表_eat_遍历_exe程序
- 在Windows下配置Apache + OpenSSL