关闭

caller和callee的区别

37328人阅读 评论(0) 收藏 举报
分类:

caller返回一个函数的引用,这个函数调用了当前的函数;callee放回正在执行的函数本身的引用,它是arguments的一个属性

caller
caller返回一个函数的引用,这个函数调用了当前的函数。
使用这个属性要注意:
1 这个属性只有当函数在执行时才有用
2 如果在javascript程序中,函数是由顶层调用的,则返回null

functionName.caller: functionName是当前正在执行的函数。

var a = function() { 
alert(a.caller); 
} 
var b = function() { 
a(); 
} 
b();

上面的代码中,b调用了a,那么a.caller返回的是b的引用,结果如下:

var b = function() { 
a(); 
} 
如果直接调用a(即a在任何函数中被调用,也就是顶层调用),返回null:

var a = function() { 
alert(a.caller); 
} 
var b = function() { 
a(); 
} 
//b(); 
a();
输出结果:

null

callee
callee放回正在执行的函数本身的引用,它是arguments的一个属性
使用callee时要注意:
1 这个属性只有在函数执行时才有效
2 它有一个length属性,可以用来获得形参的个数,因此可以用来比较形参和实参个数是否一致,即比较arguments.length是否等于arguments.callee.length
3 它可以用来递归匿名函数。

var a = function() { 
alert(arguments.callee); 
} 
var b = function() { 
a(); 
} 
b();
a在b中被调用,但是它返回了a本身的引用,结果如下:
var a = function() { 
alert(arguments.callee); 
} 


18
0
查看评论

理解js中call,apply,caller,callee的区别

理解js中call,apply,caller,callee的区别 javascript中的call(),apply(),caller(),callee()方法作用都是调用某个函数或方法,概念和作用容易混淆,我自己也经常分不清楚什么时候该用哪种函数,这里总结一下,以免忘记。 为什么要用...
  • huangchao1010
  • huangchao1010
  • 2016-11-08 01:54
  • 1528

理解argument和 callee 属性

arguments   javascript中的函数定义并未指定函数形参的类型,函数调用也未对传入的实参值做任何类型检查。实际上,javascript函数调用甚至不检查传入形参的个数 function add(x){ return x+1; } console.log(add(1));//2...
  • qq_34986769
  • qq_34986769
  • 2016-08-10 17:28
  • 694

js中的 caller与callee用法小实例

caller函数fun的calle返回调用fun的函数对象,即fun的执行环境,如果fun的执行环境为window则返回nullfunction fun(){ console.log(fun.caller)//这里必须写在fun里面,因为caller只有函数执行过程中才有效 } fun();...
  • qq_17335153
  • qq_17335153
  • 2016-09-18 15:44
  • 796

JavaScript 之arguments、caller 和 callee 介绍

1.前言 arguments, caller ,   callee 是什么? 在javascript 中有什么样的作用?本篇会对于此做一些基本介绍。 2. arguments arguments:  在函数调用时, 会自动在该函数内部生成一个...
  • oscar999
  • oscar999
  • 2013-01-16 23:42
  • 19390

caller 方法

caller caller EXPR 这个函数返回关于当前子过程调用等方面的堆栈信息。如果没有参数,它返回包名,文件名,和调用当前子过程的程序的行号: ($package, $filename, $line) = caller; 如果带参数调用,caller 把 EX
  • ace_fei
  • ace_fei
  • 2011-10-08 11:23
  • 1488

函数调用过程-栈帧 和 进程的关系

程序中,一个函数是一个过程,这个过程可以分为包括传入参数、过程代码、返回三部分构成。由于一个函数过程需要用到内部变量、临时变量等,所以需要在进程空间的栈空间分配一段存储片段来存储函数过程中的这些参数,该内存片段即为栈帧。
  • ordeder
  • ordeder
  • 2014-03-03 22:56
  • 2593

JavaScript方法call,apply,caller,callee,bind的使用详解及区别

一、call 方法 调用一个对象的一个方法,以另一个对象替换当前对象(其实就是更改对象的内部指针,即改变对象的this指向的内容)。 即  “某个方法”当做“指定的某个对象”的“方法”被执行。 Js代码 call([thisObj[,arg1[, arg2[, [,.argN]]...
  • a125138
  • a125138
  • 2012-08-13 18:31
  • 7867

Xcode中查看方法的调用者列表

Xcode在4.4版本以后,可以查看某个方法的调用位置列表(Callers)和其调用的方法列表(Callees),其使用方法为 在代码中双击高亮方法名点击代码编辑区域左上角的”方块”图标,会弹出一个弹出窗口。在弹出窗口中选择Callers,右侧就有列出所有调用此方法的位置;选择Callees则...
  • ouyangtianhan
  • ouyangtianhan
  • 2013-12-31 12:24
  • 12390

x86-64 下函数调用及栈帧原理

一蓑一笠一扁舟,一丈丝纶一寸钩。 一曲高歌一樽酒,一人独钓一江秋。 ——题秋江独钓图缘起在 C/C++ 程序中,函数调用是十分常见的操作。那么,这一操作的底层原理是怎样的?编译器帮我们做了哪些操作?CPU 中各寄存器及内存堆栈在函数调用时是如何被使用的?栈帧的创建...
  • lqt641
  • lqt641
  • 2017-06-10 19:06
  • 802

JS手册W3CSCHOOL

  • 2010-05-11 13:44
  • 4.80MB
  • 下载
    个人资料
    • 访问:455142次
    • 积分:4766
    • 等级:
    • 排名:第7181名
    • 原创:93篇
    • 转载:31篇
    • 译文:0篇
    • 评论:141条
    最新评论