szQocks
@szQocks

Как работает это замыкание?

Немного не до конца я видимо понимаю как работает замыкание в js, так вот вопрос в том - почему когда функция возвращает функцию название которой соответствует глобальной переменной , глобальная переменная не изменятся ?

let name = 'Bob';

function fn() {
    name = 'Bill';
    return;
    function name() {}
}

fn();
console.log(name); // Bob   -     почему тут не вывел Bill ?


let name = 'Bob';

function fn() {
    name = 'Bill';
    return;
    function gg() {}
}

fn();
console.log(name); // Bill
  • Вопрос задан
  • 228 просмотров
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Потому что на самом деле ваш код для движка JS выглядит примерно так:
let name = 'Bob';

function fn() {
    // Перезаписывается не "глобальная" переменная, а "локальная", содержащая функцию
    var name = function () {};
    name = 'Bill';
    return;
}

fn();

console.log(name);


Если же функцию действительно вернуть, то всё начинает работать:
let name = 'Bob';

function fn() {
    name = 'Bill';
    return function name () {};
}

console.log(fn());

console.log(name);

Но зачем тут вообще именовать эту функцию?
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы