L
L
lil_web2020-04-30 19:16:48
JavaScript
lil_web, 2020-04-30 19:16:48

How does the task from the social security work?

I was interviewing at a bank, stuck on a problem. Please explain step by step what will be the answer.

var b = 1;
var a = 2;

(function() {
  var a = 3;
  b = 4;
})();

if (a == 2){
  var a = 5;
}

console.log(a, b);

Spoiler

Ответ: 5 4

В основном, не понятны следующие моменты:
1. Почему меняется значение в анонимной функции?
2. Почему var a = 3; не влияет на a, а var a = 5; — влияет?

Answer the question

In order to leave comments, you need to log in

2 answer(s)
D
Dmitry Gololobov, 2020-04-30
@lil_web

var b = 1; //Это глобальная переменная b
var a = 2; //Это глобальная переменная a
console.log(a, b); // 2, 1
(function() {
  var a = 3; //тут объявляется переменная a внутри функции
  b = 4; // тут нет объявления переменной b, поиск переменной идет сначала внутри функции, если ее нет, то ищем ее вне границ функции и находим. Но если бы мы ее и там не нашли, то была бы ошибка "Переменная не объявлена"
})(); //Функция сразу запускается, результатом ее выполнения будет глобальная a =2 (не измен) и глобальная b = 4 (изм)

console.log(a, b); // 2, 4

if (a == 2){
  var a = 5; //так как глобальная a осталась равна 2, то условие сработает и a приравняется 5. Точнее она переопределится здесь. Условие выполняется в рамках глобальной области видимости.
}

console.log(a, b); // 5, 4

A
Alexander, 2020-04-30
@Seasle

Because in IIFE (to be exact at functions) the separate block of visibility. However, the global scope ( b) is visible. Within a block, ifthe scope is global and varcreates a variable within it.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question