Palavras-chave: argumentos, receptor, chamador
argumentos: representa os parâmetros passados para a função
callee: Declaração que representa funções e corpos funcionais
chamador: representa a função que chama a função
argumentos
Este objeto representa a função que está sendo executada e os parâmetros da função que a chama.
chamador
Retorna uma referência à função que chamou a função atual.
nomedafunção.caller
O objeto functionName é o nome da função que está sendo executada.
ilustrar
Para funções, o atributo chamador só é definido quando a função é executada. Se a função for chamada no nível superior, o chamador conterá nulo. Se o atributo chamador for usado em um contexto de string, o resultado será o mesmo que functionName.toString, ou seja, o texto descompilado da função será exibido.
chamado
Retorna o objeto Function que está sendo executado, que é o corpo do objeto Function especificado.
[função.]argumentos.callee
O parâmetro de função opcional é o nome do objeto Function que está sendo executado no momento.
ilustrar
O valor inicial do atributo callee é o objeto Function que está sendo executado.
O atributo callee é um membro do objeto de argumentos. Ele representa uma referência ao próprio objeto de função, o que é benéfico para a recursão de funções anônimas ou para garantir o encapsulamento de funções. Por exemplo, o exemplo a seguir calcula recursivamente a soma de funções naturais. números de 1 a n. Esta propriedade só está disponível quando a função relacionada está em execução. Deve-se notar também que o chamador possui um atributo de comprimento, que às vezes é melhor para verificação. argumentos.length é o comprimento real do parâmetro e argumentos.callee.length é o comprimento do parâmetro formal. A partir disso, você pode determinar se o comprimento do parâmetro formal é consistente com o comprimento real do parâmetro ao chamar.
Copie o código do código da seguinte forma:
<tipo de script='texto/javascript'>
teste de função (x,y,z)
{
alert("Comprimento real do parâmetro:"+arguments.length);
alert("Comprimento do parâmetro formal:"+arguments.callee.length);
alert("Comprimento do parâmetro formal:"+test.length);
alerta(argumentos[0])
alert(test[ 0 ]) // indefinido não tem tal uso
}
//teste(1,2,3);
teste(1,2,3,4);
/*
* argumentos não são um array (classe Array)
*/
Array.prototype.selfvalue = 1;
function testeAgumentos() {
alerta( "argumentos.selfvalue= " + argumentos.selfvalue);
}
alerta("Array.sefvalue="+new Array().selfvalue);
testAgumentos();
/**/ /*
* Demonstra o atributo chamador da função.
* Descrição: (função atual).caller: retorna uma referência à função que chamou a função atual
*/
function callerDemo() {
if (callerDemo.caller) {
var a = callerDemo.caller.arguments[0];
alerta(a);
} outro {
alert("esta é uma função superior");
}
}
função handleCaller() {
callerDemo();
}
callerDemo();
handleCaller("Parâmetro 1", "Parâmetro 2");
/**/ /*
* Demonstra o atributo callee da função.
* Descrição: argumentos.callee: O valor inicial é o objeto Function que está sendo executado, usado para funções anônimas
*/
function calleeDemo() {
alerta(argumentos.callee);
}
calleeDemo();
(function(arg0,arg1){alert("O número de formas é: "+arguments.callee.length)})();
/**/ /*
* Demonstrar o uso das funções apply e call
* Nota: A função serve para vincular a função a outro objeto para ser executado. A única diferença entre os dois é a forma de definir os parâmetros:
* aplicar(esteArg,argArray);
* chamar(esteArg[,arg1,arg2…] ]);
* Ou seja, o ponteiro this dentro de todas as funções receberá thisArg
*/
funçãoObjetoA() {
alert("Executar ObjectA() ");
alerta(argumentos[0]);
este .hit = função (msg) {alert (msg)}
this .info = "Eu sou da ObjectA"
}
funçãoObjectB() {
alert("Executar ObjectB() ");
// Chame o método ObjectA(), e tudo isso no construtor ObjectA será substituído por isto em ObjectB.
ObjectA.apply(este, argumentos); // ObjectA.call(este);
alerta(este .info);
}
ObjectB('Parâmetro 0');
var valor = "variável global";
função Obj() {
este .value = "Objeto!";
}
função Diversão1() {
alerta(este .valor);
}
Diversão1();
Fun1.apply(janela);
Fun1.apply(novo Obj());
</script>