为什么这个功能不运行?

时间:2018-03-28 18:45:34

标签: javascript ecmascript-6

当我尝试调用first()时,有人可以解释为什么下面的函数不起作用(给我一个提醒),但是当我将它分配给一个新的const时它可以工作吗?

const first = () => {
    const greet = "Hi";
    const second = () => {
        alert("greet");
    }
    return second; 
}

first() // does not work

const newFunc = first();
newFunc(); // works

这是ES6特有的,还是我错过了什么?

谢谢大家!我有一个大脑屁,我一直专注于新的语法思维,我犯了一个错误或它以不同的方式工作,但我从来没有调用第一个返回的第二个函数。我改成了:

const first = () => {
        const greet = "Hi";
        const second = () => {
            alert("greet");
        }
        return second; 
    }

    first()  

现在有效!

3 个答案:

答案 0 :(得分:0)

first()只返回一个函数对象 - 因此实际调用返回函数需要另一组()

它不需要分配到const newFunc,但first()();也可以提醒你。

这种让函数返回另一个函数的技术,或者一个暴露几个函数然后可以调用的对象,被称为 Revealing Module Pattern

答案 1 :(得分:0)

你回来"第二"作为一个函数,但你永远不会执行,你有2个选项,返回"秒()"或者在收到它后执行。



import Data.Coerce

instance ToJSON1 f => ToJSON (MyType f) where
  toJSON = (...) . (coerce :: MyType f -> MyType (Id1 f))
    {- in "(...)" we can use functions that require "ToJSON (Id1 f a)", which is informally equivalent to "ToJSON (f a)" -}




希望这有效。

答案 2 :(得分:0)

first()工作正常并返回second()函数,但我不认为你期望这个。并且您尝试将其复制到used()并因此调用它,返回第二个函数。在newFunc包含second后,调用它会为您提供预期的结果。