Подтвердить что ты не робот

Пример переменной тени в javascript

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

Это пример затенения?

var currencySymbol = "$";

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

showMoney("100");​
4b9b3361

Ответ 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, чтобы она стала доступной только для функции.