Em Javascript, os parâmetros passados podem ser modificados dentro da função, conforme segue
Copie o código do código da seguinte forma:
função func1(nome) {
nome = 'lírio';
alerta(nome);
}
func1('jack'); // saída lírio
Vejamos outro exemplo
Copie o código do código da seguinte forma:
função fun1(n) {
este.nome = n;
}
função fun2(nome) {
fun1.call(isto,'lírio');
alerta(nome);
}
fun2("jack"); // saída "jack"
A função fun1 queria alterar o parâmetro ao chamar fun2 para "lily", mas falhou. O que aparece ainda é "jack". Pense por quê?
Na verdade, fun1 ainda tem a capacidade de modificar os parâmetros ao chamar fun2, usando o atributo caller
Copie o código do código da seguinte forma:
função fun1() {
argumentos.callee.caller.arguments[0] = 'lírio';
}
função fun2(nome) {
fun1.call(isto,nome);
alerta(nome);
}
fun2("jack"); // saída "lírio"
Pode-se ver que a pilha de chamadas da função interna é visível para a função externa e pode ser modificada.