【发布时间】: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
我想做这样的事情:
let date = null;
export function setDate(date) {
// Set "date" from module using "date" from function parameters
}
这甚至可能吗?还是我必须为这两个变量选择不同的名称?
【问题讨论】:
标签: javascript ecmascript-6 es6-modules
你不能。当不同的作用域变量具有相同的名称时,您所做的称为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 就是这种情况,允许局部阴影。
【讨论】:
由于variable shadowing,这是不可能的。实际上,应该避免变量阴影,因为它会导致意想不到的后果并使代码更难理解。只需清楚地命名即可。
【讨论】: