Пример переменной тени в javascript
Я узнал о терминах переменной тени в Eloquent Javascript (глава 3), но я пытаюсь понять точный базовый пример концепция.
Это пример затенения?
var currencySymbol = "$";
function showMoney(amount) {
var currencySymbol = "€";
document.write(currencySymbol + amount);
}
showMoney("100");
Ответы
Ответ 1
Это также называется областью переменных.
Переменная существует только в пределах содержащейся в ней функции/метода/класса, и они будут переопределять любые переменные, которые относятся к более широкой области.
Вот почему в вашем примере будет показан знак евро, а не доллар. (Поскольку currencySymbol
, содержащий доллар, имеет более широкий (глобальный) объем, чем currencySymbol
, содержащий знак евро).
Что касается вашего конкретного вопроса: Да, это хороший пример переменной тени.
Ответ 2
В компьютерном программировании переменное затенение происходит, когда переменная, объявленная в определенной области (блок принятия решения, метод или внутренний класс), имеет то же имя, что и переменная, объявленная во внешней области. Эта внешняя переменная называется затененной...
поэтому я считаю, что ваш пример хорош.
у вас есть глобально названная переменная, которая имеет то же имя, что и внутренний метод. внутренняя переменная будет использоваться только в этой функции. Другие функции без объявления этой переменной будут использовать глобальную.
Ответ 3
Да, ваш пример - пример затенения.
Затенение будет сохраняться и в других сценариях из-за того, как закрытие работает в JavaScript. Вот пример:
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
Обратите внимание, что в этом случае, даже когда xCounter возвращается, функция, которую он возвращает, все еще имеет ссылку на свой собственный x
, а вызовы этой внутренней функции не влияют на глобальную, хотя оригинал уже давно вышел области.
Ответ 4
Мы не можем определить переменную более одного раза. Но мы можем определить в разных сферах.
let name="tara"
if(true){
let name="ali"
if(true){
console.log(name)
}
}
теневое копирование переменной - это когда переменная в локальной области использует свое значение вместо переменной в родительской области. Таким образом, значение локальной переменной является теневым для родителей.
в приведенном выше коде определены две переменные имени, но они не определены в одной и той же области видимости. поэтому console.log(name) проверит локальную область видимости, если найдет переменную имени, в которой она используется, если нет, то проверит родительскую область видимости, как только найдет ее, она использует ее, чтобы не перейти в корень.
Ответ 5
var role = "Engineer";
console.log(role);
function displayRole(){
role = "developer";
console.log(role);
}
displayRole();
console.log(role);
Обратите внимание, как последняя строка кода (console.log) печатает developer
но не в области действия функции. Это хороший пример shadowing
когда переменная role в глобальной области видимости была перезаписана ролью в области действия функции.
Чтобы избежать затенения, переменная в области действия функции должна быть объявлена с использованием ключевого слова var, чтобы она стала доступной только для функции.