繁体   English   中英

从JavaScript中的函数返回函数

[英]Returning functions from functions in JavaScript

我正在学习如何从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); 

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

您必须同时调用createDrinkOrder及其创建的函数,试试这个

(createDrinkOrder(passenger))();

让我们一步一步来看看

  • createDrinkOrder(passenger)调用createDrinkOrder ,它返回一个匿名函数
  • (...)()调用匿名函数

绝对 - 因为你只回来了这个功能 - 你实际上从来没有打过它......试试这个:

createDrinkOrder(passenger)();

希望这可以帮助!

你没有。 您的问题是您调用的函数返回另一个函数,但不会调用实际记录文本的函数。 如果你像这样调用返回的函数: createDrinkOrder(passenger)() ,它将调用这两个函数。

 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); // Because this returns an anonymous function // getDrinkOrderFunction(); // It must be executed to have the expected result createDrinkOrder(passenger)(); // This line both returns the function, and executes it. } // General function to serve passengers: function servePassengers(passengers) { for (var i = 0; i < passengers.length; i++) { serveOnePassenger(passengers[i]); } } servePassengers(passengers); 

您自己的问题标题基本上就是答案:您已将createDrinkOrder()函数编写为返回另一个函数的函数。 如果您创建一个函数但从不调用它,该函数将不会执行任何操作。

您不需要在serveOnePassenger()函数中涉及变量。 您可以创建该函数并使用一个语句调用它:

  createDrinkOrder(passenger)();

它调用createDrinkOrder()然后立即使用返回的值作为函数。

createDrinkOrder返回一个函数对象。 第三行代码调用createDrinkOrder ,它返回一个函数,但从不调用返回的函数。 您不一定需要将createDrinkOrder返回的值createDrinkOrder变量,但您需要确保调用它返回的函数。 你可以这样做而不使用变量: createDrinkOrder(passenger)();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM