Mots clés : arguments, appelé, appelant
arguments : Représente les paramètres passés dans la fonction
appelé : Représente l'instruction de la fonction et le corps de la fonction
appelant : Représente la fonction qui appelle la fonction
arguments
Cet objet représente les paramètres de la fonction en cours d'exécution et la fonction qui l'appelle.
caller
Renvoie une référence à la fonction qui a appelé la fonction actuelle.
functionName.caller
functionName object est le nom de la fonction en cours d'exécution.
Explication
Pour les fonctions, l'attribut appelant n'est défini que lorsque la fonction est exécutée. Si la fonction est appelée depuis le niveau supérieur, caller contient null . Si l'attribut caller est utilisé dans un contexte de chaîne, le résultat est le même que functionName.toString, c'est-à-dire que le texte décompilé de la fonction est affiché.
appelé
Renvoie l'objet Function en cours d'exécution, qui est le corps de l'objet Function spécifié.
[function.]arguments.callee
Le paramètre de fonction facultatif est le nom de l'objet Function en cours d'exécution.
Explication
La valeur initiale de l'attribut appelé est l'objet Function en cours d'exécution.
L'attribut callee est membre de l'objet arguments. Il représente une référence à l'objet fonction lui-même. Ceci est bénéfique pour la récursion de fonctions anonymes ou pour assurer l'encapsulation de fonctions. calcule récursivement les nombres naturels de 1 à n. Cette propriété n'est disponible que lorsque la fonction associée est en cours d'exécution. Il convient également de noter que l'appelé possède un attribut de longueur, ce qui est parfois meilleur pour la vérification. arguments.length est la longueur réelle du paramètre et arguments.callee.length est la longueur du paramètre formel. À partir de là, vous pouvez déterminer si la longueur du paramètre formel est cohérente avec la longueur réelle du paramètre lors de l'appel.
<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>
Pour plus d'arguments js, le résumé de l'utilisation de l'appelant jcallee et les articles connexes, veuillez faire attention au site Web PHP chinois !