bien en javascript se puede pensar que, alcances se definen mis llaves: {
Y }
, y dentro de unas variables de ámbito puede ser redefinido, por lo mire:
function x(){
var name=3;
var name=4;
console.log(name); // output is: 4
}
x();
Pero esto es sólo una verdad a medias, de hecho, lo que ocurre es que el intérprete revisa el código y mueve todas las declaraciones var
al principio, mientras se les asigna un undefined
(y todos los argumentos se definen y toman de la pila), y luego se ejecutará el código que escribió. Entonces cualquier var
después de la primera simplemente se ignora. Y el código que escribió es igual a:
function mytask(name,title){
var name = arguments[0];
var title = arguments[1];
name = name;
title = title;
var showalert = ("Hi " + name + " your job title is " + title);
console.log(showalert);
return showalert;
}
document.write(mytask("dan", "administrator"));
Por lo tanto, su desaceleración y asignación es redundante. De todos modos, el alcance no está cambiando, nada más será diferente.
Editar
El intérprete pasa sobre su código, con la ejecución de cualquier cosa, cualquier declaración var x = y;
se dividirá en var x = undefined;
y x=y;
. Y el var x = undefined;
se moverá a la parte superior del código. Y el x=y;
estará en el mismo lugar que el enunciado original. Si no entendiste las cosas acerca de la pila, no te molestes, así es como los compiladores convierten las llamadas a funciones en ensamblajes; vale la pena saberlo en caso de que tengas tiempo; pero no lo importante aquí.
De todos modos, justo después de esos cambios, y tal vez se realizan algunas optimizaciones, se ejecuta el código resultante. Este no es el código que escribió, sino uno igual. Lo que señaló al redefinir los argumentos es un caso límite en el que estas transformaciones se vuelven visibles.
Si pudiera, ¿cómo se referiría a cada uno de ellos? – cheeken
¿Quiere decir que puede usar los argumentos con nombre que está pasando a la función como los nombres de las variables en la función? Sí, sí puedes. ¿Has tenido algún problema con esto? –
El código funciona. Sin embargo, no me gustaría mantener esto. –