如何让我的匿名函数 return 一个值而不是一个函数?

How to get my anonymous function to return a value instead of a function?

我的代码:

var host_choice = function(){
    var choice;
    do {
        choice = shuffled_list[random_choice()];
    } while (choice == "car" || choice == player_choice);

    return choice;  
};

这里 host_choice 是我必须调用的函数。但我不确定如何使它成为包含 choice 的变量。我知道我在这里遗漏了一些基本的东西,但是该怎么做呢?

旁注:我的 shuffled_list 包含 3 个元素。我希望我的 host_choice 变量既不包含元素 car 也不包含 player_choice 是否有 "fancier" 方法来做到这一点?

你可以这样称呼它,在它后面加上 ():

var host_choice = function(){
    var choice;
    do {
        choice = shuffled_list[random_choice()];
    } while (choice == "car" || choice == player_choice);

    return choice;  
}(); // <====

请注意,这意味着它只会 运行 一次,因为您不会在任何地方保留对该函数的引用。

你也会经常在函数部分周围看到用 () 写的:

var host_choice = (function(){
    var choice;
    do {
        choice = shuffled_list[random_choice()];
    } while (choice == "car" || choice == player_choice);

    return choice;  
})(); // <====

在你的情况下,这完全是风格问题,你不需要它们。 如果您没有使用 return 值,那么您将需要它们以便解析器认为 function 关键字不会启动函数声明. (这就是风格的用武之地:有些人更喜欢始终包含它们,即使它们不是绝对必要的,因为它们 有时 是必需的。)[=15 中有关该位的详细信息=].

您可以直接调用它。

var host_choice = (function(){
  var choice;
  do {
      choice = shuffled_list[random_choice()];
  } while (choice == "car" || choice == player_choice);

  return choice;  
})();

这是IIFE(立即调用的函数表达式)的示例。由于各种原因,它非常方便,例如 Javascript.

中的模块化