1. Caller
Retorna uma referência à função que chama a função atual.
functionName.Caller
O objeto FunctionName é o nome da função executada.
ilustrar
Para funções, o atributo chamador é definido apenas quando a função é executada. Se a função for chamada pelo nível superior de um programa JavaScript, o chamador contém nulo.
O exemplo a seguir ilustra o uso do atributo chamador:
A cópia do código é a seguinte:
função callerdemo () {
if (argumentos.caller) {
var a = callerdemo.caller.toString ();
alerta (a);
} outro {
alerta ("Esta é uma função superior");
}
}
function handlecaller () {
callerdemo ();
}
handlecaller ();
função calleedemo () {
alerta (argumentos.callee);
}
calleedemo ();
2. Callee
Retorna o objeto de função que está sendo executado, ou seja, o corpo do objeto de função especificado.
[function.] argumentos.callee
O parâmetro de função opcional é o nome do objeto de função atualmente em execução.
ilustrar
O valor inicial da propriedade Callee é o objeto de função que está sendo executado.
A propriedade Callee é um membro do objeto de argumentos, que representa uma referência ao próprio objeto de função, que é propício à recursão de funções anônimas ou para garantir o encapsulamento da função. Por exemplo, o cálculo recursivo da soma dos números naturais de 1 a n no exemplo a seguir. Esta propriedade está disponível apenas quando a função relevante está sendo executada. Também é importante observar que a Callee tem o atributo de comprimento, que às vezes é melhor para verificação. argumentos.Length é o comprimento do parâmetro real e os argumentos.Callee.Length é o comprimento do parâmetro formal. Isso pode ser usado para determinar se o comprimento do parâmetro formal é consistente com o comprimento do parâmetro real ao ligar.
Exemplo
A cópia do código é a seguinte:
// callee pode se imprimir
função calleedemo () {
alerta (argumentos.callee);
}
// usado para verificar parâmetros
função calleeLengthDemo (arg1, arg2) {
if (argumentos.Length == argumentos.callee.length) {
window.alert ("Verifique se os parâmetros formais e os parâmetros reais estão corretos!");
retornar;
} outro {
alerta ("Comprimento real do argumento:" +argumentos.length);
alerta ("comprimento do tamanho:" +argumentos.callee.length);
}
}
// Cálculo recursivo
var sum = function (n) {
if (n <= 0)
retornar 1;
outro
Retornar n + argumentos.Callee (n - 1)
}
Uma função recursiva mais geral:
A cópia do código é a seguinte:
var sum = function (n) {
se (1 == n) retornar 1;
caso contrário, retorne n + soma (n-1);
Quando chamado: alerta (soma (100));
A função contém uma referência à própria soma. O nome da função é apenas um nome de variável. Chamar a soma dentro da função é equivalente a chamar
Uma variável global não pode ser bem refletida na própria chamada e o uso de Callee será um método melhor no momento.