在Javascript中的主叫方和被叫方的详细解决方案
调用方:返回对调用函数函数的函数的引用(使用:函数调用)。
描述:对于一个函数,调用者属性只在函数执行时定义。如果从顶层调用函数,调用者是空的。
无功/时间= 3控制数量,删除会在来电和handlecaller交替不断
函数调用(){
(调用者)引用函数返回调用者的调用函数。
}
功能handlecaller(){
如果(时间> 0){
时间--
警报(handlecaller。来电) /参考函数返回handlecaller呼叫功能
警报(调用者)调用函数返回调用者的调用函数。
来电者()
}
}
HandleCaller()
实例分析:当第一handlecaller跑,两警报返回null,并提醒(handlecaller。来电)返回null,因为它是从顶层调用,并提醒(来电,来电)返回null因为访客的默认值为空。接下来,调用者()函数调用。Caller.caller返回引用的函数(handlecaller)。handlecaller功能可以通过caller.caller又称(),当第二次handlecaller跑警报(handlecaller。来电)返回调用者的代码,这其实是一个参考来电。警报(来电。电话)返回handlecaller代码。因为函数之间的调用关系是handlecaller ->人-> handlecaller.then 2功能不断交替进行。
调用方指向调用当前函数的函数,但如果在全局范围(即顶层窗口)调用它,则返回null。
代码上升
====================
的功能,而是使用TestCaller(){
如果(testcaller.caller = = null){
console.log('accessed全球);
其他{ }
console.log('accessed ' +而是使用TestCaller。来电);
}
}
全球呼叫
(而是使用TestCaller); / /访问在全球
调用函数
函数A(){
TestCaller();
}
一个(); / /访问功能(一)({而是使用TestCaller);}
在这一点上,testcaller.caller点功能
Callee:返回对应的实参的函数参考。(主要用于匿名函数的递归)
说明:也许是最重要的事,你在网络上看到的是被调用者返回一个函数的引用被处决。我明白每一个函数都有自己的观点,这是通常用来存储参数。参数具有callee属性,和初始值是一个函数引用自身。当你的函数执行这项声明,参数对应于你正在执行的函数的默认功能。然后arguments.callee是当前正在执行的函数参考。当然,如果你的论点(例子中的参数),有明显的其他功能,你可以很自然地叫,又args.callee()函数。
函数A(){
警报(参数。被叫方)
var args =参数
函数C(){
警报(参数。被叫方)
Args.callee()
}
(C)
}
(一)
实例分析:一个arguments.callee例是默认的参考函数返回当前执行的(一个返回自己的函数参考,C返回C,其功能参考)通过存储功能使用args参数,使用args.callee内置函数C()函数调用一次。
====================
函数A(x){
如果(x=1)
返回x;
其他的
返回x +(X-1);
}
A(12 78)
这是一个简单的递归,运行结果是正常的。
看看下面的调用方法
var;
a =空;
B(12); / /错误:'a'is不是一个函数
原因很简单,B = A,B =函数(){ };B在打电话之前,我们使用了= null.so当函数运行,返回x +(X-1);在一个,它分为空,没有功能A.
因此,如何解决这个问题是错误的,让我们改变一种写作方式。
函数A(x){
如果(x=1)
返回x;
其他的
返回arguments.callee(X-1); / /这是改变。
}
再打电话
var;
a = null;
b(12 78);
The reason: Although we will be a=null, but the function a does not use a, instead, it points to the current function through the arguments.callee.
因为arguments.callee定义返回的函数被执行。