【问题标题】:Javascript - Anonymous functions declared without type declarations, should they be local scoped?Javascript - 没有类型声明的匿名函数,它们应该是本地范围的吗?
【发布时间】:2017-11-15 19:51:21
【问题描述】:

我正在阅读一些 JavaScript 以供工作,并且遇到了一段我觉得很有趣的代码。我做了一些阅读并遇到了:

Is using 'var' to declare variables optional?

这说明了缺少 var 类型声明,因为将 var 置于冒泡可变全局而非全局状态的作用域中。

例子:

var foo = bar  // locally scoped
foo = bar // outer scope, can have global ramifications

我的问题是,当将外部范围声明与匿名函数结合使用时,这是否可以接受?推荐的处理方式是什么?这是“好”的约定吗?这应该在本地范围内吗?出于我的目的,它在一个类中,所以我看不出它为什么不是本地范围的。再说一遍,JS 菜鸟,所以寻找一些见解。

例子:

updateThing = (e) => {
    this.state.items = e.target.value;
}

非常感谢,谢谢。

【问题讨论】:

  • IMO - 尽可能清楚地保留您可以定义的所有内容。该代码可能有效,但新开发人员,或者假设您在一年内寻找这可能无法快速理解,不得不搜索您所指的范围内的位置。您可能还会遇到一些令人讨厌的范围提升,您真的想清楚地定义您的变量。我个人认为这不是一个“好的”约定,但如果有人不同意,我会很好奇为什么。
  • @ajmajmajma 看到这在很大程度上是我的事,代码没有 cmets 突出显示为什么它会在本地以外的任何范围内,这让我质疑如果我重构和本地范围它会发生什么。我喜欢把所有东西都写得尽可能明确,所以没有第二次猜测,所以我可能会 PR 它并在本地范围内。感谢您的评论。
  • 是的,这是一个很好的用例,说明您为什么不想这样写东西。对不起,你必须处理这个!

标签: javascript reactjs function variable-declaration scoping


【解决方案1】:

没有类型声明的匿名函数

没有匿名函数声明(export default 除外)。您拥有的所有示例都是带有初始化程序的赋值或变量声明。

当将外部作用域声明与匿名函数结合起来时,这是否可以接受?推荐的处理方法是什么?这是“好的”约定吗?

不,这是一种不好的做法。只是不要这样做。永远不要分配给你没有在任何地方声明的变量。

为了我的目的,它在一个类中

如果您的意思是class 定义主体:赋值语法有experimental shortcut for property intialisations in the constructor。不要使用它,特别是如果您不知道它的含义。直接写出来:

class … {
    constructor(…) {
         …
         this.updateThing = (e) => {
             this.state.items = e.target.value;
         };
    }
    …
}

这不是变量赋值,和声明一点关系都没有。

【讨论】:

    猜你喜欢
    • 2017-06-09
    • 2011-04-13
    • 1970-01-01
    • 2018-01-27
    • 2011-02-13
    • 1970-01-01
    • 2018-10-26
    • 2022-10-13
    • 2019-04-08
    相关资源
    最近更新 更多