从JavaScript中的函数返回函数

Mar*_*air 3 javascript function

我正在学习如何从JavaScript中的其他函数返回函数.这是我的代码有效:

var passengers = [
    { name: "Jane", ticket: "coach" },
    { name: "Evel", ticket: "firstclass" },
    { name: "John", ticket: "coach" },
    { name: "Bob", ticket: "premium"}
];

function createDrinkOrder(passenger) {
    var orderFunction;
    if (passenger.ticket === 'firstclass') {
        orderFunction = function() {
            console.log(passenger.name + ', would you like wine or cocktail?');
        };
    } else if (passenger.ticket === 'premium') {
        orderFunction = function() {
            console.log(passenger.name + ', would you like some wine?');
        };
    } else {
        orderFunction = function() {
            console.log(passenger.name + ', soda or water?');
        };
    }
    return orderFunction;
}

function serveOnePassenger(passenger) {
    var getDrinkOrderFunction = createDrinkOrder(passenger);
    getDrinkOrderFunction();
    // createDrinkOrder(passenger);
}

// General function to serve passengers:
function servePassengers(passengers) {
    for (var i = 0; i < passengers.length; i++) {
        serveOnePassenger(passengers[i]);
    }
}

servePassengers(passengers);  
Run Code Online (Sandbox Code Playgroud)

我的问题是关于'serverOnePassenger'的功能:当我在这个函数中注释掉前两行并取消注释第三行时,控制台中没有任何反应.为什么我必须声明一个变量然后为它分配一个函数,然后才调用这个var以使这个代码工作?谢谢!

aku*_*uhn 5

你必须调用它们createDrinkOrder和它创建的函数,试试这个

(createDrinkOrder(passenger))();
Run Code Online (Sandbox Code Playgroud)

让我们一步一步来看看

  • createDrinkOrder(passenger)调用createDrinkOrder返回匿名函数
  • (...)() 调用匿名函数