【问题标题】:Why does IIFE function return undefined when value is passed instead of an Object?当传递值而不是对象时,为什么 IIFE 函数返回未定义?
【发布时间】:2019-02-18 09:44:07
【问题描述】:

我现在正在学习Javascript,请看这段sn-p代码:

我在这里定义了 3 个立即调用的函数表达式。我的期望是当我 console.log(controller) 它返回 undefined。谁能解释一下,为什么 controller IIFE 能够返回一个 Object 而不是一个值?

var budgetController = (function() {
  var x = 23;
  var add = function(a) {
    return x + a;
  }
  return {
    publicTest: function(b) {
      console.log(add(b));
    }
  }
})();

var UIController = (function() {

  //Some UI based Code

})();

var controller = (function(budgetCtrl, UICtrl) {
  var z = budgetCtrl.publicTest(5);
  return z;
})(budgetController, UIController);

console.log(controller); // Should return the value of 'z' [My Confusion/Misconception lies here]
console.log(budgetController); // Returns a Object

【问题讨论】:

  • 因为publicTest 不返回任何内容(尝试使用return 关键字)
  • publicTest 返回 undefined 因为您没有包含 return 语句(或使用带有隐式 return 语句的箭头函数)。
  • 你需要区分“返回”和“输出”。两者非常不同,尽管返回的值可以在控制台中显示为输出。 console.log(...) 输出 东西,但返回 undefined。你的budgetCtrl.publicTest 也是如此。因此... "console.log(controller); 应该返回z 的值";不,它会输出 z 的值。然而,z 恰好是 undefined,因为同样的术语混淆;所以console.log(controller) outputsreturns undefined (尽管出于不同的原因)。
  • 感谢@CertainPerformance,成功了!
  • @Amadan,感谢您这么快的解释。这真的帮助我理解它。

标签: javascript


【解决方案1】:

由于您将参数传递给 publicTest,您应该返回值以将其存储在 Z 变量中

var budgetController = (function() {
  var x = 23;
  var add = function(a) {
    return x + a;
  };
  return {
    publicTest: function(b) {
      console.log(add(b));
      return add(b);
    }
  };
})();

var UIController = (function() {
  //Some UI based Code
})();

var controller = (function(budgetCtrl, UICtrl) {
  var z = budgetCtrl.publicTest(5);
  return z;
})(budgetController, UIController);

console.log(controller); // Should return the value of 'z' [My Confusion/Misconception lies here]
console.log(budgetController);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-05
    • 1970-01-01
    • 1970-01-01
    • 2018-10-28
    相关资源
    最近更新 更多