【发布时间】: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)outputs 和 returnsundefined(尽管出于不同的原因)。 -
感谢@CertainPerformance,成功了!
-
@Amadan,感谢您这么快的解释。这真的帮助我理解它。
标签: javascript