当我尝试调用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()
现在有效!
答案 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
后,调用它会为您提供预期的结果。