第一类使用的这两个函数之间有什么区别?(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
是否正确?