如何让我的匿名函数返回值而不是函数?

时间:2017-03-28 10:29:50

标签: javascript anonymous-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是否有#34;发烧友"这样做的方式?

2 个答案:

答案 0 :(得分:2)

您可以直接调用它。

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

  return choice;  
})();

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

答案 1 :(得分:1)

你打电话给它,()之后:

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;  
})(); // <====

在你的情况下,这完全是一种风格问题,你不需要它们。 如果您没有使用返回值,则需要它们,因此解析器不认为function关键字正在启动函数声明。 (这就是风格的来源:有些人宁愿总是包括它们,即使它们不是绝对必要的,因为它们是必要的有时。)my answer here中有关该位的详细信息。