Palabras clave: argumentos, destinatario, autor de la llamada
argumentos: representa los parámetros pasados a la función
destinatario: declaración que representa funciones y cuerpos de funciones
llamador: representa la función que llama a la función
argumentos
Este objeto representa la función que se está ejecutando y los parámetros de la función que la llama.
llamador
Devuelve una referencia a la función que llamó a la función actual.
nombredefunción.llamador
El objeto functionName es el nombre de la función que se está ejecutando.
ilustrar
Para las funciones, el atributo de la persona que llama solo se define cuando se ejecuta la función. Si la función se llama desde el nivel superior, entonces la persona que llama contiene nulo. Si el atributo de la persona que llama se usa en un contexto de cadena, el resultado es el mismo que functionName.toString, es decir, se muestra el texto descompilado de la función.
destinatario
Devuelve el objeto Función que se está ejecutando, que es el cuerpo del objeto Función especificado.
[función.]argumentos.callee
El parámetro de función opcional es el nombre del objeto Función que se está ejecutando actualmente.
ilustrar
El valor inicial del atributo de la persona que llama es el objeto Función que se está ejecutando.
El atributo de la persona que llama es un miembro del objeto de argumentos. Representa una referencia al objeto de función en sí, lo cual es beneficioso para la recursividad de funciones anónimas o para garantizar la encapsulación de funciones. Por ejemplo, el siguiente ejemplo calcula de forma recursiva la suma de las naturales. números del 1 al n. Esta propiedad solo está disponible cuando se está ejecutando la función relacionada. También cabe señalar que el destinatario tiene un atributo de longitud, que a veces es mejor para la verificación. arguments.length es la longitud real del parámetro y arguments.callee.length es la longitud del parámetro formal. A partir de esto, puede determinar si la longitud del parámetro formal es consistente con la longitud del parámetro real al llamar.
Copie el código de código de la siguiente manera:
<tipo de script='texto/javascript'>
prueba de función (x,y,z)
{
alert("Longitud real del parámetro:"+argumentos.length);
alert("Longitud del parámetro formal:"+argumentos.callee.length);
alert("Longitud del parámetro formal:"+test.length);
alerta(argumentos[ 0 ])
alert(test[ 0 ]) // indefinido no tiene tal uso
}
//prueba(1,2,3);
prueba(1,2,3,4);
/*
* los argumentos no son una matriz (clase Array)
*/
Array.prototype.selfvalue = 1;
función pruebaAgumentos() {
alerta( "argumentos.selfvalue= " + argumentos.selfvalue);
}
alert("Array.sefvalue="+new Array().selfvalue);
pruebaAgumentos();
/**/ /*
* Demuestra el atributo de llamador de la función.
* Descripción: (función actual).caller: devuelve una referencia a la función que llamó a la función actual
*/
función que llamaDemo() {
si (callerDemo.caller) {
var a = callerDemo.caller.arguments[ 0 ];
alerta(a);
} demás {
alert("esta es una función superior");
}
}
función handleCaller() {
llamadaDemo();
}
llamadaDemo();
handleCaller("Parámetro 1", "Parámetro 2");
/**/ /*
* Demuestra el atributo de destinatario de la función.
* Descripción: arguments.callee: El valor inicial es el objeto Función que se está ejecutando, utilizado para funciones anónimas
*/
función calleeDemo() {
alerta(argumentos.callee);
}
calleeDemo();
(function(arg0,arg1){alert("El número de formas es: "+argumentos.callee.length)})();
/**/ /*
* Demostrar el uso de las funciones de aplicación y llamada.
* Nota: La función es vincular la función a otro objeto para ejecutar. La única diferencia entre los dos es la forma de definir los parámetros:
* aplicar(thisArg,argArray);
* call(thisArg[,arg1,arg2…] ]);
* Es decir, al puntero this dentro de todas las funciones se le asignará thisArg
*/
funciónObjetoA() {
alerta( "Ejecutar ObjetoA() " );
alerta(argumentos[ 0 ]);
este .hit = función (msg) {alerta(msg)}
this .info = "Soy del ObjetoA"
}
funciónObjetoB() {
alerta( "Ejecutar ObjetoB() " );
// Llame al método ObjectA() y todo esto en el constructor de ObjectA será reemplazado por esto en ObjectB.
ObjectA.apply(este, argumentos); // ObjectA.call(this);
alerta (este .info);
}
ObjetoB('Parámetro 0');
valor var = "variable global";
función Obj() {
this .value = "¡Objeto!";
}
función Diversión1() {
alerta (este valor);
}
Diversión1();
Diversión1.apply(ventana);
Fun1.apply(nuevo Obj());
</script>