使用var和let同名变量?

时间:2016-08-22 19:36:26

标签: javascript

自从发布以来,它允许我遵循更严格的命名约定。但是,让我们考虑下面的场景,它是有效还是hacky做这样的事情?我非常清楚第一个有函数作用域和另一个块作用域。

var sample = 'sample';

function fooBar() {
  let sample = 'This is a sample';

  console.log(sample);
}

fooBar();

console.log(sample)

2 个答案:

答案 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