【问题标题】:Javascript Closure - Why isn't undefined displayed?Javascript Closure - 为什么未显示未定义?
【发布时间】:2021-12-30 08:54:55
【问题描述】:

我试图了解闭包在 Javascript 中的工作原理。 在最后一行,如果我输入 sayHi("Hello")("John Doe"),控制台会按预期显示“HelloJohn Doe”。

现在,如果我删除(“John Doe”),为什么控制台会变成空白而不是显示“Helloundefined”?

    function sayHi(whattosay){
        return function yolo(name) {
            console.log(whattosay + name)
        }
    }
    sayHi("Hello")

【问题讨论】:

    标签: javascript closures


    【解决方案1】:

    那是因为你还需要调用函数, 即使您不想提供“名称”参数。

    尝试:sayHi("whatever")()

    你会看到预期的输出!

    任何未定义的

    如果你省略最后一对括号,你只是得到一个函数,如果你调用它会打印预期的输出,但你还没有调用它。

    例如,您可以将返回的函数存储在某个变量中,然后再调用它。

    【讨论】:

    • 哇!!非常感谢!!!
    【解决方案2】:

    这将返回你的内部函数 yolo

    function sayHi(whattosay){
        return function yolo(name) {
            console.log(whattosay + name)
        }
    }
    sayHi("Hello")
    

    你需要调用 yolo 函数来查看你的 console.log 输出

    function sayHi(whattosay){
        return function yolo(name) {
            console.log(whattosay + name)
        }
    }
    sayHi("Hello")()
    

    您甚至可以将返回函数存储在变量中并调用它

    function sayHi(whattosay){
        return function yolo(name) {
            console.log(whattosay + name)
        }
    }
    const yolo = sayHi("Hello")
    
    yolo()
    

    【讨论】:

    • 太棒了!谢谢。
    猜你喜欢
    • 2021-09-03
    • 1970-01-01
    • 2018-02-27
    • 1970-01-01
    • 1970-01-01
    • 2021-04-04
    • 2015-03-02
    • 1970-01-01
    • 2012-01-12
    相关资源
    最近更新 更多