【问题标题】:Why do I get undefined plus the value?为什么我得到 undefined 加上值?
【发布时间】:2018-12-22 03:00:38
【问题描述】:

我对 JS 很陌生,我只是在玩弄语法。

当我打电话时

budgetController.publicTest2();

我明白了:

46 未定义

我希望是 46,但为什么我也得到未定义?

完整代码:

var budgetController = (function() {
    var x = 23;

    function add(a) {
        return a + x;
    }

    return {
        publicTest: function() {
            const y = add(23);
            return y;
        },
        publicTest2: function() {
            return (function(d){
                console.log(d());
            })(budgetController.publicTest);
        },
    }
    })();
    
budgetController.publicTest2();

【问题讨论】:

  • 您是在控制台还是在某个 repl 中运行它?它不会记录undefined,但budgetController.publicTest2() 的结果是未定义的。您应该考虑将其设为一个可运行的 sn-p(使用编辑器中的 <> 按钮)来演示该问题。
  • 我将其设为可运行的 sn-p,但在 sn-p 控制台中看不到它。我在 firefox/chrome 中看到它。
  • 很好,下面 Vedran 的回答解释了这种行为。控制台只是打印函数返回的值,这是未定义的,因为它没有返回任何东西。

标签: javascript iife


【解决方案1】:

控制台打印出undefined,因为这是budgetController.publicTest2() 表达式的返回值。

控制台总是打印出您输入的表达式的值。例如:

  • 如果您输入1 + 2,您将返回3
  • 如果您输入 console.log(3)你会回来3undefined(返回 表达式的值console.log(3))

【讨论】:

  • 是的,我看到了这种情况……我想我只是没注意到。
  • 我不确定我是否理解。由于它调用 PublicTest 然后调用 add() 函数,我不会得到多个“未定义”吗?
  • 当我使用下面的代码调用budgetController.PublicTest2() 时,我没有得到未定义。我刚刚得到的数字结果:var budgetController = (function() { 987654331 function add(a) { 987654333 @`}`return { 987654335 return add(el); 987654337 publicTest2: function() { 987654339 return d(100); 987654341 }, 987654343@})();
  • 没错,你会得到数字结果,因为它是表达式budgetController.PublicTest2() 的结果。在原始示例中,PublicTest2 函数内部没有 return 语句,因此该函数的返回值隐式为 undefined
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-12-14
  • 2019-08-13
  • 2014-11-08
  • 1970-01-01
  • 1970-01-01
  • 2018-01-14
  • 2018-10-23
相关资源
最近更新 更多