estilo - Un ejemplo de sombreado variable en javascript
javascript estilo (3)
En la programación de computadoras, el sombreado de variables ocurre cuando una variable declarada dentro de un cierto alcance (bloque de decisión, método o clase interna) tiene el mismo nombre que una variable declarada en un alcance externo. Esta variable exterior se dice que está sombreada ...
así que creo que tu ejemplo es bueno.
tienes una variable con nombre global que comparte el mismo nombre que el método interno. la variable interna se usará solo en esa función. Otras funciones sin esa declaración de variable usarán la global.
Aprendí sobre el término variable shadowing en Eloquent Javascript (Capítulo 3) , pero estoy tratando de entender un ejemplo preciso y básico del concepto.
¿Es este un ejemplo de sombra?
var currencySymbol = "$";
function showMoney(amount) {
var currencySymbol = "€";
document.write(currencySymbol + amount);
}
showMoney("100");
Eso es también lo que se conoce como alcance variable .
Una variable solo existe dentro de su función / método / clase contenedora, y estas anularán cualquier variable que pertenezca a un alcance más amplio.
Es por eso que en su ejemplo, se mostrará un signo de euro, y no un dólar. (Debido a que el símbolo de currencySymbol
contiene el dólar está en un alcance más amplio (global) que el símbolo de currencySymbol
contiene el símbolo del euro).
En cuanto a su pregunta específica: Sí, ese es un buen ejemplo de sombreado variable.
Sí, tu ejemplo es un ejemplo de sombreado.
La sombra continuará en otros escenarios también debido a cómo funcionan los cierres en JavaScript. Aquí hay un ejemplo:
var x = -1;
function xCounter() {
var x = 0;
return function() {
++x;
return x;
};
}
console.log(x); // -1
counter = xCounter();
console.log(counter()); // 1
console.log(counter()); // 2
console.log(x); // still -1, global was never touched
Tenga en cuenta que en este caso, incluso cuando devuelve xCounter, la función que retorna todavía tiene una referencia a su propia x
y las invocaciones de esa función interna no tienen efecto en el global, aunque el original haya quedado fuera del alcance hace mucho tiempo.