En Javascript, les paramètres passés peuvent être modifiés au sein de la fonction, comme suit
Copiez le code comme suit :
fonction func1(nom) {
nom = 'lys';
alerte(nom);
}
func1('jack');//sortie Lily
Regardons un autre exemple
Copiez le code comme suit :
fonction fun1(n) {
this.name = n;
}
fonction fun2(nom) {
fun1.call(this,'lily');
alerte(nom);
}
fun2("jack");//sortie "jack"
La fonction fun1 voulait changer le paramètre lors de l'appel de fun2 en "lily", mais elle a échoué. Ce qui apparaît est toujours "jack". Pensez-vous pourquoi ?
En fait, fun1 a toujours la possibilité de modifier les paramètres lors de l'appel de fun2, en utilisant l'attribut caller
Copiez le code comme suit :
fonction fun1() {
arguments.callee.caller.arguments[0] = 'lily';
}
fonction fun2(nom) {
fun1.call(ce,nom);
alerte(nom);
}
fun2("jack");//sortie "lys"
On voit que la pile d'appels de la fonction interne est visible par la fonction externe et peut être modifiée.