0

有两个函数,一个使用第一类并将一个函数分配给一个变量然后返回该变量,另一个只是一个普通的简单函数。在那里,我不明白为什么一个比另一个更好,因为它们看起来和对我做的事情完全相同。有人可以帮我一下,让我更容易理解其中的区别吗?

头等舱

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.");
    }   
}
4

3 回答 3

3

createDrinkOrder1 返回一个您可以稍后调用的函数:

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

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

createDrinkOrder2 立即打印结果:

createDrinkOrder1(passenger);
// printed to console

有时您返回一个函数不仅是为了以后能够调用它,而且是为了创建一个闭包,这可能是一个值得阅读的有趣话题。

于 2016-01-28T23:36:56.863 回答
0

头等舱

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)如果您想再次打印到控制台,您必须调用。

于 2016-01-28T23:37:45.940 回答
0

第一个实现会将声明的函数提供给调用函数,因此如果他们愿意,他们可以通过调用变量“orderFunction”再次使用它。第二个只会打印一次值并且不能重复使用,因此取决于您的用例是什么。

于 2016-01-28T23:38:04.387 回答