Пример затенения переменных в javascript

Я узнал о термине затенение переменных в Eloquent Javascript (глава 3), но я пытаюсь понять точный, базовый пример концепции.

Это пример слежки?

var currencySymbol = "$";

function showMoney(amount) {
  var currencySymbol = "€";
  document.write(currencySymbol + amount);
}

showMoney("100");​

6 ответов

Это также то, что известно как переменная область.

Переменная существует только внутри содержащей ее функции / метода / класса, и она будет переопределять любые переменные, которые относятся к более широкой области.

Вот почему в вашем примере будет показан знак евро, а не доллар. (Поскольку currencySymbol содержащий доллар находится в более широком (глобальном) объеме, чем currencySymbol содержащий знак евро).

Что касается вашего конкретного вопроса: да, это хороший пример затенения переменных.

В компьютерном программировании затенение переменных происходит, когда переменная, объявленная в определенной области (блок принятия решений, метод или внутренний класс), имеет то же имя, что и переменная, объявленная во внешней области. Эта внешняя переменная называется затененной...

так что я верю, что твой пример хорош.

у вас есть переменная с глобальным именем, которая имеет то же имя, что и внутренний метод. внутренняя переменная будет использоваться только в этой функции. Другие функции без этого объявления переменной будут использовать глобальную.

Да, ваш пример является примером слежки.

Затенение будет сохраняться и в других сценариях из-за того, как замыкания работают в 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 и вызовы этой внутренней функции не влияют на глобальную, даже если оригинал давно вышел из области видимости.

Мы не можем определять переменную более одного раза. Но мы можем определять в разных масштабах.

let name="tara"
if(true){
  let name="ali"
  if(true){
    console.log(name)
  }
}

Затенение переменных - это когда переменная в локальной области видимости использует свое значение вместо переменной в родительской области. Таким образом, значение локальных переменных затеняется над родительскими.

в приведенном выше коде определены две переменные имени, но они не определены в одной и той же области. поэтому console.log(name) будет проверять локальную область видимости, если найдет переменную имени, которую он использует, если не проверяет родительскую область, когда ее находит, она использует ее, поэтому она не идет в корень.

var role = "Engineer";
console.log(role);

function displayRole(){
    role = "developer";
    console.log(role);
}

displayRole();
console.log(role);

Обратите внимание, как печатается последняя строка кода (console.log) developerно это не входит в область действия функции. Это хороший примерshadowing где переменная роли в глобальной области видимости была перезаписана ролью в области видимости функции.

Чтобы избежать затенения, переменная в области действия функции должна быть объявлена ​​с использованием ключевого слова var, чтобы она стала доступной только для функции.

Да, это хороший пример затенения. Говорят, что переменная глобальной области видимости затенена переменной области видимости блока, если обе имеют одинаковое имя.Это происходит в вашем коде, и область блока затеняет глобальную область.

Другие вопросы по тегам