Задать вопрос
0rislav
@0rislav
Юрист, который рвется в программисты! =)

Почему не работает код (JavaScript)?

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

//работает
function fun1() {
    let a = 3;
    let b = 4;
    return function() {
        return a + b;
    }
}

function fun2() {
    let x = fun1();
    console.log(x());
}

fun2();

//ПРОСТЫЕ ПРИМЕРЫ(начал по кирпичикам разбирать)

//не работает - [Function]
function fun1() {
    let a = 3;
    let b = 4;
    //почему не работает, ведь я же возвращаю сумму a и b
    return function() {
        a + b;
    }
}
console.log(fun1());

//не работает - undefined
function fun1() {
    let a = 3;
    let b = 4;
    //почему не работает, ведь я же возвращаю сумму a и b
    return function() {
        a + b;
    }
}
let x = fun1();
console.log(x());
  • Вопрос задан
  • 374 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 3
Negwereth
@Negwereth
lvivcss.com.ua
Вы не возвращаете сумму.
В первом случае вы возвращаете функцию, а не результат её выполнения.
Во втором - вы выполняете возвращённую функцию, которая ничего не возвращает.

Вернее, возвращает, но значение по умолчанию - undefined.
Ваш код работает ровно так, как написан.
Ответ написан
Комментировать
petermzg
@petermzg
Самый лучший программист
//не работает - [Function]
function fun1() {
    let a = 3;
    let b = 4;
    //почему не работает, ведь я же возвращаю сумму a и b
    return function() { // А вот функцию вы возращаете
        a + b; // Чтобы вернуть тут нужно вызвать return
    }
}
console.log(fun1());  // пытаетесь отобразить обьект-функцию
Ответ написан
Комментировать
@pavelsazonov
вот здесь есть подробно с примерами learn.javascript.ru/closures
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы