第一类使用的这两个函数之间有什么区别?(javascript)

第一类使用的这两个函数之间有什么区别?(javascript),javascript,function,variables,first-class-functions,Javascript,Function,Variables,First Class Functions,有两个函数,一个使用第一个类并将函数赋值给变量,然后返回变量,另一个只是一个常规的简单函数。在那里,我不明白为什么一个比另一个好,因为他们看起来和对我做的事情完全一样。有谁能帮我一把,让我更容易理解两者的区别吗 头等舱 function createDrinkOrder1(passenger) { var orderFunction; if (passenger.ticket === "firstclass") { orderFunction = function

有两个函数,一个使用第一个类并将函数赋值给变量,然后返回变量,另一个只是一个常规的简单函数。在那里,我不明白为什么一个比另一个好,因为他们看起来和对我做的事情完全一样。有谁能帮我一把,让我更容易理解两者的区别吗


头等舱

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 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;
}
简单功能

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

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

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

// later:
orderFunction();
// now printed to console
createDrinkOrder2立即打印结果:

createDrinkOrder1(passenger);
// printed to console

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

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

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

// later:
orderFunction();
// now printed to console
createDrinkOrder2立即打印结果:

createDrinkOrder1(passenger);
// printed to console

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

first class

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 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.");
    }   
}
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(某些乘客)
即可立即打印。这意味着如果您想再次打印到控制台,必须调用
createDrinkOrder2(一些乘客)

头等舱

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 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.");
    }   
}
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(某些乘客)
即可立即打印。这意味着您必须调用
createDrinkOrder2(一些乘客)
,如果您想再次打印到控制台。

第一个实现将声明的函数赋予调用函数,以便他们可以通过调用变量“orderFunction”再次使用它。第二个函数只打印一次值,不能重复使用,这取决于您的用例是什么。

第一个实现将声明的函数赋予调用函数,以便他们可以通过调用变量“orderFunction”再次使用它。第二个只打印一次值,不能重复使用,这取决于您的用例。

第一个实际返回的是可以使用的内容。第二个只是打印到控制台。@zero298但是它返回的内容,它仍然是控制台打印,为什么不直接使用
返回控制台.log………
而不是使用函数呢?你可以多次使用返回的函数,而不必再次调用
createDrinkOrder1
函数。@KaiQing:你是什么意思?@Bergi-我的意思是console.log和IE相处不好。即使如果你在js中没有打开控制台的情况下留下一个console.log,Edge不再爆炸,也只有80%的公司白痴和MS合同将大规模网络绑定到古老的IE浏览器上,因为需要4年时间才能让技术人员批准更新硬件或软件。因此,当IE看到console.log时,它会哭泣并放弃,除非叔叔控制台窗口恰好打开,劝说它不要自杀,但却没有警告可怜的IE,如果叔叔控制台窗口不在那里保存它,它就会死。第一个实际上返回了一些可以使用的东西。第二个只是打印到控制台。@zero298但是它返回的内容,它仍然是控制台打印,为什么不直接使用
返回控制台.log………
而不是使用函数呢?你可以多次使用返回的函数,而不必再次调用
createDrinkOrder1
函数。@KaiQing:你是什么意思?@Bergi-我的意思是console.log和IE相处不好。即使如果你在js中没有打开控制台的情况下留下一个console.log,Edge不再爆炸,也只有80%的公司白痴和MS合同将大规模网络绑定到古老的IE浏览器上,因为需要4年时间才能让技术人员批准更新硬件或软件。因此,当IE看到console.log时,它会哭泣并放弃,除非控制台窗口叔叔碰巧打开,劝说它不要自杀,但却没有警告可怜的IE,如果控制台窗口叔叔不在那里救它,它就会死。所以实际上,在
orderFunction
中,
控制台的其中一个.log
已经返回并存储在
orderFunction
中,因此每当它运行时,它都会运行
控制台.log
而不是再次运行整个函数,然后再检查
if/else
是否正确,在
orderFunction
中,其中一个
控制台.log
已返回并存储在
orderFunction
中,因此无论何时运行,它都将运行
控制台.log
而不是再次运行整个函数,检查
if/else
是否正确?