【问题标题】:Access a ES module variable from a function which use the same name in parameter从参数中使用相同名称的函数访问 ES 模块变量
【发布时间】:2020-07-30 15:43:04
【问题描述】:

我想做这样的事情:

let date = null;

export function setDate(date) {
    // Set "date" from module using "date" from function parameters
}

这甚至可能吗?还是我必须为这两个变量选择不同的名称?

【问题讨论】:

    标签: javascript ecmascript-6 es6-modules


    【解决方案1】:

    你不能。当不同的作用域变量具有相同的名称时,您所做的称为shadowing

    举个例子:

    let x = 10;
    {
      let x = 20;
    
      try {
        let x = x + 30; // error
      } catch (e) {
        console.log(e.message);
      }
    
      console.log(x); // 20
    }
    console.log(x); // 10

    外部作用域变量保持它们的值,因为它们没有被覆盖,你基本上有不同的变量具有相同的名称,你总是会引用那个在当前范围内:由于范围不同,您不会两次声明同一个变量

    还要注意那里的错误,您可能会尝试使用其他作用域变量作为内部变量的值,但这不起作用:它会被视为在初始化之前使用当前作用域变量。

    (上面的代码使用let,因为它是块作用域的)

    值得一提的是,在使用变量阴影的情况下,这通常是一种不好的做法,在某些语言中是故意实现的,因为它有助于编写更简洁的代码和可读的代码:例如,Rust 就是这种情况,允许局部阴影。

    【讨论】:

      【解决方案2】:

      由于variable shadowing,这是不可能的。实际上,应该避免变量阴影,因为它会导致意想不到的后果并使代码更难理解。只需清楚地命名即可。

      【讨论】:

        猜你喜欢
        • 2016-06-28
        • 1970-01-01
        • 2016-06-28
        • 2021-12-17
        • 1970-01-01
        • 1970-01-01
        • 2012-06-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多