Definição de argumentos
Todas as funções têm seus próprios argumentos objeto de armazenar os parâmetros que ele realmente recebe, sem ser limitado à lista de parâmetros definida quando a função é declarada. Não é uma matriz, mas é semelhante a uma matriz. Possui as mesmas propriedades e métodos de acesso que uma matriz. Ele pode acessar os valores do parâmetro único correspondente por argumentos [n] e ter o comprimento do atributo de comprimento da matriz. Mas existem alguns métodos que não têm matrizes. Você pode converter argumentos em matrizes reais por meio de chamada e executar operações de matriz.
var args = array.prototype.slice.call (argumentos);
Array de aula
1. Determine se os argumentos são uma matriz
Alerta (Argumentos Instância de Array); alerta (instância de argumentos do objeto);
2. Como determinar estritamente que um dados é uma instância de uma classe de matriz (matriz)
função isarray (value) {if (typeof Array.isArray === "function") {return Array.isArray (value); } else {return object.prototype.toString.call (value) === "[Array do objeto]"; }}3. Converta argumentos em uma matriz
Método 1: Os tipos internos podem ser encontrados através do protótipo. Array.prototype.slice é a fatia de método interno para acessar a matriz. Retorne uma matriz através do método da fatia. A chamada é um método que chama um objeto e substitui o objeto atual por outro objeto.
var arg = array.prototype.slice.call (argumentos, 0);
Método 2: O desempenho é pior que o método 1, porque cria uma matriz primeiro e depois prossegue.
var arg = [] .slice.call (argumentos, 0);
Método 3: converta em uma matriz através do loop
função toArray (argumentos) {var a = []; for (var i = 0; i <argumentos.Length; i ++) {A.UnShift (argumentos. [i]); } retornar um;}Chamador
Quando uma função é chamada por outra função, a função chamada gerará automaticamente um atributo de chamador, apontando para o objeto de função que o chama. Se a função não for chamada, o chamador será nulo.
function testCaller () {var caller = testCaller.caller; alert (chamador);} função acaller () {testCaller ();} acaller ();O que aparece é o conteúdo do Acaller de função.
argumentos.Callee
argumentos.Callee aponta para a própria função em execução e retorna o objeto de função que está sendo executado, ou seja, o corpo do objeto de função especificado.
Nota: Argumentos.Length é o comprimento do parâmetro real, argumentos.Callee.Length é o comprimento do parâmetro formal, que geralmente é usado para determinar se o comprimento do parâmetro real é consistente.
Obtenha os parâmetros reais da função por meio de argumentos e obtenha os parâmetros formais da função por meio de argumentos.Callee.
Também é amplamente utilizado nos fechamentos.
var i = 0; função b (num) {if (num <10) {num ++; i ++; // Se houver parâmetros, o Callee também deve trazer os parâmetros; argumentos.callee (num); } else {// Output 2 Alert ("The Call"+I+"Callee!"); }} b (8); A aplicação de argumentos.Callee in Closures fornece uma função de chamar recursivamente. // Use argumentos.Callee para calcular o fatorial de 10, por exemplo: 1 × 2 × 3 × 4 × 5 × 6 × 7 .... função c (x) {return x> 1? x * argumentos.callee (x - 1): 1} (10); // Saída 6 alerta (c (3)); // Saída 3628800 Alert (C (10));Exemplo: Callee encontra a soma de 1-n
função fn (n) {if (n == 1) return n; caso contrário, retorne n+argumentos.callee (n-1);}Permite que uma função anônima se autodenize
exemplo:
Lista de funções (tipo) {var resultado = "<"+tipo+"l> <li>"; var args = array.prototype.slice.call (argumentos, 1); resultado += args.join ("</li> <li>"); resultado+= "</li> </"+tipo+"l>"; resultado de retorno;} var listhtml = list ("o", "um", "dois"); console.log (listhtml);Exemplo 2: Pergunta da entrevista: Qual é o seguinte console.Log Resultado [1,2,3,4]?
function foo (x) {console.log (argumentos); retornar x;} foo (1,2,3,4); função foo (x) {console.log (argumentos); retornar x;} (1,2,3,4)Durante a pré-explicação, função fn () {} (1); será processado separadamente e dividido em duas funções, a primeira é a função fn () {} e a segunda é uma função anônima: (1). Se o segundo não tiver parâmetros, um erro será relatado, mas a função acima será incluída em um (), o que está correto.
(função fn () {console.log (argumentos);} (1,2,3,4)); (função foo (x) {console.log (argumentos); return x;}) (1,2,4) função foo () {bar.appluments, argumentos);} função (x) {x) {Console.