<meta name="keywords" content="华夏棋牌,javascript,caller,callee" />
华夏棋牌 > web前端 > js教程 > 注释

javascript中caller和callee详解_javascript手艺

原创 2016-05-16 15:46:06 0 178
第六期线上培训班
比来学习javascript,碰着caller和callee的效果,去网上百度了许多。搜到的内容年夜同小益,整理总结了一下与年夜家分享。

caller:前往一个对换用function函数的函数的援用(用法:function.caller)

诠释:关于函数来讲,caller属性只需在函数推行时才有界说。假定函数由顶层挪用,caller则为null。

var time = 3 //控制次数,去掉落落会一直在caller与handleCaller交替赓续推行
function caller() {
  caller.caller()//前往挪用caller函数的函数援用
}
function handleCaller() {
  if (time > 0){
    time--
    alert(handleCaller.caller)//前往挪用handleCaller函数的函数援用
    alert(caller.caller)//前往挪用caller函数的函数援用
    caller()
  }
}
handleCaller()

华夏棋牌例子剖析:第一次handleCaller运转的时间,两个alert前往的都是null,alert(handleCaller.caller)前往null是由于它是由顶层挪用, alert(caller.caller)前往null是由于caller的默许值是null。接下去caller()函数被挪用,caller.caller前往的是挪用它的函数(handleCaller)的援用,经由历程caller.caller()可以再次挪用handleCaller函数。第二次handleCaller运转的时间,alert(handleCaller.caller)前往的是caller代码(着实就是caller的援用),alert(caller.caller)前往的是handleCaller代码。由于函数之间的挪用关系是handleCaller->caller->handleCaller。以后就赓续在2个函数之间交替推行。

caller指向挪用以后函数的函数,然则有一点,假定是在全局作用域内(即顶层window)被挪用,则前往null。
代码走起

====================
function testCaller(){
if(testCaller.caller == null){
console.log('accessed at global');
}else{
console.log('accessed at ' + testCaller.caller);
}
}


在全局挪用

testCaller(); // accessed at global

在一个函数中挪用

function a(){
testCaller();
}
a(); // accessed at function a(){testCaller();} 

此时,testCaller.caller指向就是 function a

callee:前往相对应的arguments的函数援用。(多用于匿名函数递归)

诠释:或许你在网上看到最多的是callee前往正在推行的函数援用。我是这么明确,每个函数都有一个自己的arguments,通常是用来存放参数的。arguments有一个callee 属性,初始值就是对应自己的函数援用。当你函数推行到该语句时,arguments是默许对应的是你现在推行的函数,那么arguments.callee为以后正在推行的函数的援用。虽然假定你有标志过其他函数的arguments(例子中的args),自然可以用args.callee()去再次挪用谁人函数。

function a(){
  alert(arguments.callee)
  var args = arguments
  function c(){
    alert(arguments.callee)
    args.callee()
  }
  c()
}
a()

华夏棋牌例子剖析:例子中的arguments.callee都是默许前往以后正在推行的函数的援用(a中前往a自己函数援用,c中前往c自己函数援用),而经由历程用args存放a函数的arguments,在内置函数c中应用args.callee()再次挪用a函数。

====================
function a(x){

if(x<=1)
return x;
else
return x + a(x-1);
}
a(12) // 78

这是一个极简的递归,运转效果正常。


再看看下面的挪用措施

var b = a;
a = null; // 将a收受吸收
b(12); // erro : 'a' is not a function



启事也质朴,b=a,b=function a(){};在b挪用之前,我们用了a=null。以是在 function a 运转的时间,其中的return x + a(x-1);中的a,指向的就是null,而不是 function a。
以是就报错了,若那里置赏罚这样的效果。我们将a换一种写法

function a(x){
if(x<=1)
return x;
else
return arguments.callee(x-1); // 这句是改变的地方
}

再挪用

var b = a;
a = null;
b(12); // 78

启事:虽然我们将a=null了,然则函数a中并没有用到a,而是经由历程arguments.callee指向以后函数。
由于arguments.callee的界说就是:前往正在推行的函数。

php中文网最新课程二维码
  • 相关标签:javascript caller callee
  • 本文原创宣布php中文网 ,转载请注明出处,谢谢您的尊重!
  • 相关文章


  • 原生javascript完因素享到同伙圈功效 支持ios和android_javascript手艺
  • jQuery链式挪用与show知识浅析_jquery
  • JS完成登录页面记着密码和enter键登录措施推荐_javascript手艺
  • BootstrapTable与KnockoutJS相联络完成增删改查功效【一】_javascript手艺
  • javascript中caller和callee详解_javascript手艺
  • 网友议论

    文明上彀理性语言,请遵守 新闻议论服务协定

    我要议论

    独孤九贱(5)_ThinkPHP5视频教程

    ThinkPHP是国际最盛行的中文PHP开发框架,也是您Web项目的最好选择。《php.cn独孤九贱(5)-ThinkPHP5视频教程》课程以ThinkPHP5最新版本为例,从最基本的框架知识泉源,将...

    • 2017-05-16 12:03:57
    • 点击数(172387)

    独孤九贱(4)_PHP视频教程

    华夏棋牌江湖传言:PHP是天下上最好的编程语言。真的是这样吗?这个梗现实是从哪来的?学会本课程,你就会明确了。 华夏棋牌-万豪棋牌电玩城-微信娱乐棋牌出品的PHP入门系统教授修养视频,完全从初学者的角度出发,绝不玩虚的,一切以适用、有用...

    • 2017-03-20 22:47:17
    • 点击数(168627)

    独孤九贱(1)_HTML5视频教程

    华夏棋牌《php.cn原创html5视频教程》课程特点:php中文网原创滑稽段子系列课程,以恶弄,段子为主题气焰气焰的php视频教程!轻松的教授修养气焰气焰,杂乱的教授修养形式,让同砚们在不知不觉中,学会了HTML知识。 ...

    • 2017-03-13 10:15:11
    • 点击数(136265)

    ThinkPHP5实战之[教授修养治理系统]

    华夏棋牌本套教程,以一个真实的黉舍教授修养治理系统为案例,手把手教会您怎样在一张白纸上,从零泉源,一步一步的用ThinkPHP5框架快速开发出一个商业项目。

    • 2017-07-24 16:48:56
    • 点击数(129241)

    PHP入门视频教程之一周学会PHP

    一切盘算机语言的学习都要从根原泉源,《PHP入门视频教程之一周学会PHP》不只是PHP的基础部门更主要的是PHP语言的焦点手艺,是学习PHP必须控制的内容,任何PHP项目的完成都离不开这部门的内容,通...

    • 2016-11-16 14:54:14
    • 点击数(128713)

    作者信息

    php中文网

    认证0级讲师

    比来文章

    相关视频教程

  • javascript低级视频教程
  • jquery 基础视频教程
  • javascript三级联动视频教程
  • 独孤九贱(3)_JavaScript视频教程
  • 独孤九贱(6)_jQuery视频教程
  • 相关视频章节