【问题标题】:How to call an arrow function that hasn't still be declarated [duplicate]如何调用尚未声明的箭头函数[重复]
【发布时间】:2020-08-01 17:20:34
【问题描述】:

我的代码中有这个:

const [dimensions, setDimensions] = useState(getDimensions())

const getDimensions = () => {
   // stuff
}

当我调用它时,该函数没有被声明,所以我得到一个错误。但是,如果我将其声明为传统函数,则不会发生错误。

const [dimensions, setDimensions] = useState(getDimensions())

function getDimensions() {
   // stuff
}

有没有办法用箭头函数做到这一点?

【问题讨论】:

  • 没有。您要么必须先声明它,要么使用函数声明。
  • 没有。为什么不在使用前简单定义呢?
  • 为了易读性,我通常在类的顶部定义状态,在底部定义函数

标签: javascript react-native ecmascript-6


【解决方案1】:

这是因为在箭头函数示例中,您声明了一个函数表达式。函数表达式没有被提升。如果你需要使用箭头函数,你需要在使用前声明它。

【讨论】:

  • "你正在声明一个函数表达式" - 具体来说,你正在声明一个const,并用任意表达式初始化它(在这种情况下恰好是箭头函数文字)。还有initialisers are not hoisted.
  • @Bergi 因此,如果您使用 var 初始化箭头函数,那么它将被提升并调用而不会出错?
  • @Hyetigran 不,var 初始化器也没有被提升,但 vars 被隐式初始化为 undefined 所以当你试图调用它时,你只会得到一个不同的错误。跨度>
【解决方案2】:

我无法解释为什么箭头函数和传统函数的行为不同。

但是,如果您想使用箭头函数,则可以更新代码以设置初始状态,并且仅在使用 useEffect 安装组件后才调用 getDimensions。

例子:

const [dimensions, setDimensions] = useState({})

const getDimensions = () => {
   // stuff
}
useEffect(()=> {
  getDimensions()
}, [])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-21
    • 1970-01-01
    • 2017-10-24
    相关资源
    最近更新 更多