这两个函数使用头等舱有什么区别? (JavaScript的)

时间:2016-01-28 23:30:40

标签: javascript function variables first-class-functions

有两个函数,一个使用第一个类,并为函数赋值然后返回变量,另一个函数只是一个常规的简单函数。在那里,我不明白为什么一个比另一个更好,因为他们看起来和做同样的事情对我来说。有人可以帮我一把,让我更容易理解差异吗?

第一堂课

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 个答案:

答案 0 :(得分:3)

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

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

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

createDrinkOrder2立即打印结果:

createDrinkOrder1(passenger);
// printed to console

您有时会返回一个函数,不仅可以在以后调用它,还可以创建一个闭包,这可能是一个有趣的主题。

答案 1 :(得分: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)

答案 2 :(得分:0)

第一个实现会将声明的函数提供给调用函数,因此如果需要,可以通过调用变量ℴ 39结果来再次使用它。第二个只打印一次值,不能重复使用,所以取决于你的用例。