自从发布以来,它允许我遵循更严格的命名约定。但是,让我们考虑下面的场景,它是有效还是hacky做这样的事情?我非常清楚第一个有函数作用域和另一个块作用域。
var sample = 'sample';
function fooBar() {
let sample = 'This is a sample';
console.log(sample);
}
fooBar();
console.log(sample)
答案 0 :(得分:1)
它有效。
由于一个声明在函数之外而另一个声明在内部,你甚至可以用var
声明两者:
var sample = 'sample';
function fooBar() {
var sample = 'This is a sample';
console.log(sample); // 'This is a sample'
}
fooBar();
console.log(sample); // 'sample'

答案 1 :(得分:1)
你在这里尝试做的是完全有效的,称为阴影。顾名思义 - 您已使用功能范围变量 示例 隐藏了全局范围变量 示例 。通过这样做,你已经限制自己访问全局变量而不使用一些特殊的技巧。 您仍然可以在函数内部访问同名的全局变量,如下所示
var sample = 'sample';
function fooBar() {
var sample = 'This is a sample';
console.log(sample); // 'This is a sample'
console.log(window.sample); //Sample
//console.log(this.sample);//Sample. Works only in non strict mode
}
fooBar();
console.log(sample); // 'sample'
此外,如果有人说从不使用var ,那么声明要做得太难了。 var仍然有它的用途。您可以在这里查看Kyle Simpson撰写的这篇文章
https://davidwalsh.name/for-and-against-let
希望这会有所帮助。
快乐学习:) Vatsal