Каковы различия между этими двумя функциями, которые использует первый класс? (JavaScript)

Есть две функции: одна использует первый класс и назначает функцию переменной, а затем возвращает переменную, а другая - просто обычная простая функция. Там я не понимаю, почему один лучше, чем другой, потому что они оба выглядят и делают то же самое для меня. Может кто-нибудь, пожалуйста, помогите мне понять разницу?

первый класс

function createDrinkOrder1(passenger) {
    var orderFunction;
    if (passenger.ticket === "firstclass") {
        orderFunction = function() {
            console.log("Would you like a cocktail or wine?");
        };
    } else {
        orderFunction = function() {
            console.log("Your choice is cola or water.");
        };
    }
    return orderFunction;
}

простая функция

function createDrinkOrder2(passenger){
    if(passenger.ticket === "firstclass"){
        console.log("Would you like a cocktail or wine?");
    }else{
        console.log("Your choice is cola or water.");
    }   
}

3 ответа

Решение

createDrinkOrder1 возвращает функцию, которую вы можете ПОЗВОНИТЬ:

var orderFunction = createDrinkOrder1(passenger);
// nothing printed to console yet

// later:
orderFunction();
// now printed to console

createDrinkOrder2 немедленно печатает результаты:

createDrinkOrder1(passenger);
// printed to console

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

Первая реализация передаст объявленную функцию вызывающей функции, чтобы они могли использовать ее снова, если захотят, вызвав переменную 'orderFunction'. Второй просто напечатает значение один раз и не может быть использован повторно, так что зависит от того, каков ваш вариант использования.

первый класс

function createDrinkOrder(passenger) {
    var orderFunction;
    if (passenger.ticket === "firstclass") {
        orderFunction = function() {
            console.log("Would you like a cocktail or wine?");
        };
    } else {
        orderFunction = function() {
            console.log("Your choice is cola or water.");
        };
    }
    return orderFunction;
}

Возвращает функцию, которую можно использовать после разрешения ее вызова.

var a = createDrinkOrder(some_passenger);

// a now has a function that I can call whenever I want

// If I want to print the result every second I can use
setInterval(a, 1000);

// Or just call it immediately
a();

простая функция

function createDrinkOrder2(passenger){
    if(passenger.ticket === "firstclass"){
        console.log("Would you like a cocktail or wine?");
    }else{
        console.log("Your choice is cola or water.");
    }   
}

Ничего не возвращает и просто печатает сразу при звонке createDrinkOrder2(some_passenger), Это означает, что вы должны позвонить createDrinkOrder2(some_passenger) если вы хотите распечатать на консоли снова.

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