代码之家  ›  专栏  ›  技术社区  ›  Gilles

lamdba函数中警告的阴影变量

  •  1
  • Gilles  · 技术社区  · 6 年前
    我正在使用 tslint 在一个typescript项目中,我经常收到关于lamdba函数中阴影变量的警告。

    举个例子:

    const page = this.currentDocument.pages.find(page => page.pageNumber === pageNumber);
    

    这里的警告是关于 page 变量

    我已经改变了这一点,因为我发现在这里重复使用页面变量名的样式不好,而且令人困惑,但我想知道这是否会造成错误,或者在这些情况下,这仅仅是一个样式/理解问题 。我知道影子变量通常会在其他情况下创建bug。

    有人能举一个例子说明这里可能发生的具体问题吗?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Robbie Milejczak Diego Felipe    6 年前

    不是真的。隐藏变量导致错误的唯一方法是不打算隐藏变量。一个非常做作的例子:

    const factors = [ 1, 2, 3, 4 ]
    const factor = 5
    const factorsMultiplied = factors.map(factor => factor * factor) 
    // [ 1, 4, 9, 16 ] but expected [ 5, 10, 15, 20 ]
    

    只要确定不需要访问隐藏在闭包中的变量,就不会遇到任何奇怪的行为。

    如果要在某些情况下禁用规则,可以执行以下操作:

    /*tslint:disable:no-shadowed-variable*/
    const page = this.currentDocument.pages.find(page => page.pageNumber === pageNumber);
    /*tslint:enable:no-shadowed-variable*/