我已经阅读了我关于var和let的博客。我看到的是这个。
var 是一个函数或全局范围变量,取决于它的定义位置。
哪里
let 是块范围变量
所以在很多文章中,我看到他们建议使用 let 而不是 var。我理解这一点,因为它消除了变量范围的冲突。
所以我想问在哪里使用 let 和在哪里使用 var?如果可能,请提供任何相关链接。如果我去推荐,我必须到处使用。
我的理解是这样的。
let
应该在 for 循环中使用,因为它会创建自己的词法范围。
for(let i =0;i<5;i++){
setTimeout(function(){
console.log(i);
},100);
}
所以在这种情况下,由于 let,我们将能够打印 0,1,2,3,4,但是如果我们使用 var,它将打印 5 次 5。
另外,我想知道您对函数范围和全局范围应该使用什么的建议?
比方说,我有文件索引.js
var first = 1; // what should be used here and why
function function1(){
var first = 1; // what should be use here and why `let or var`
var first1 = 2; // what should be use here and why `let or var`
for(let i=0;i<2;i++){
console.log(i);
}
另外,我填充let不仅仅是一个变量,我创建了自己的词汇范围,在引擎盖下会有更多的操作,例如创建IIFE之类的东西。
我的理解是,我们应该使用函数和全局范围作为var
,而让作为块范围?请提供任何推荐的链接,描述什么在哪里更好以及为什么?
谢谢。
现在只使用let
基本上是正确的。
在几乎所有情况下,let
更好或至少等同于var
考虑到泄漏的声明会让您编写容易出错的代码。避免使用变量。
看看这个代码:
for(var i = 0; i < 6; i++) {
document.getElementById('my-element' + i)
.addEventListener('click', function() { alert(i) })
}
与此代码相反:
for(let i = 0; i < 6; i++) {
document.getElementById('my-element' + i)
.addEventListener('click', function() { alert(i) })
}
第一个做一个闭包,捕捉i
,由var
定义,而另一个做i
不同的值。第一个示例使每个回调警报为 6,因为它们都指向同一个对象。但是,第二个示例中的let
每次迭代时都会创建一个新的块范围。这解决了javascript中一个非常常见的陷阱。
在大多数情况下,如果您需要使用var
的范围来实现使用let
不可用的东西,这几乎总是有问题的标志。
另外,不要依赖var
的可变吊装。如果您使用的是以前未声明的变量,则它很容易出错。
大多数情况下,尝试遵循您遵循的风格指南。如果您没有遵循的特殊风格指南,请尝试AirBnB的:https://github.com/airbnb/javascript 这里提到了"永远不要使用var
并使用let
"的事情:https://github.com/airbnb/javascript#variables
let
和var
当您 wan 全局定义变量或局部定义整个函数时,无论块范围如何,都应使用var
。使用var
关键字分配的变量具有功能范围。该变量无法在函数外部访问。
并且,您应该使用let
来声明范围仅限于使用它的块、语句或表达式的变量。在块内使用时,let
将变量的范围限制在该块内。
用let
赋值的变量与用var
定义的变量非常相似。主要区别在于范围。这已在上面提到过。分配了 let 的变量具有块范围。这意味着变量可以在该块和任何子块中看到。分配了var
的变量具有功能范围,并忽略块范围规则。分配了let
的变量不能重新声明,只能重新分配。
根据本文,仅当您知道变量将具有动态值时才使用
let
关键字。您可能不再需要使用 var
显然,您知道let
和var
之间的区别,您的问题是在哪里使用哪个?
首先,如果您正在寻找更好的性能,请在任何可能的地方使用 let。但是,您必须知道某些旧浏览器可能无法处理let
.
其次,我认为对你的问题最好和最短的答案是"尽可能长时间地使用let
,如果你不能,那就使用var
"。
如果你深入研究let
和var
之间的差异,你可以找出你应该在哪里使用var
而不是let
,我建议你阅读这篇文章。