我已经阅读了有关var和let的博客。我看到的是这个。
var是一个函数或全局范围变量,取决于定义的位置。
其中
let是块作用域变量
因此,在很多文章中,我看到他们建议使用let而不是var。我知道这是因为它消除了变量范围的冲突。
所以我想问在哪里使用let和在哪里使用var?如果可能的话,请提供任何相关链接。如果我推荐,那么到处都必须使用let。
我了解的是这个。
let
应该在for循环中使用,因为它会创建自己的词法作用域。
for(let i =0;i<5;i++){
setTimeout(function(){
console.log(i);
},100);
}
因此在这种情况下,由于let,我们将能够打印0、1、2、3、4,但是如果我们使用var,那么它将打印5次5。
此外,我想知道您对函数范围和全局范围应使用什么的建议?
可以说,我有文件index.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
并仅用作块范围?请提供任何推荐的链接,其中描述了哪里以及为什么更好?
谢谢。
答案 0 :(得分:3)
单个标识符只能用于表示单个概念。(良好的编程技巧)
const
表示不能重新分配。
如果您不需要重新分配,则const
应该是let
的默认选择,因为您希望用法在代码中尽可能清晰。
当我需要重新分配变量时,我使用let
。因为,我用一个变量代表一件事,所以let
的用例往往是for
循环或数学算法。
我不在ES6中使用var
。循环的块作用域是有价值的,但是我无法想到我更喜欢var
胜过let
的情况。
const
是一个信号,表明不会重新分配标识符。
let
,表示该变量可能被重新分配,例如循环中的计数器或算法中的价值互换。它还表明该变量将仅在定义的块中使用,而该块并不总是完整的包含函数。
var
是最弱信号。该变量可能会或不会重新分配,并且该变量可能会或可能不会用于整个功能,或仅用于块 strong>或循环。
我希望我回答了您的问题,如有任何困惑,请告诉我。
答案 1 :(得分:2)
这几天只使用$("#project_id").html('<option value="' + res.project_id + '">' + res.project_name + ' [ ' + res.project_id + ' ]</option>');
$("#project_id").val(res.project_id).trigger('change.select2');
是最正确的。
在几乎所有情况下,考虑到泄漏的声明使您编写易于出错的代码,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
具有不同的值。第一个示例使每个回调警报为6,因为它们都指向同一个对象。但是,第二个示例中的i
每次迭代都会创建一个新的块作用域。这解决了javascript中一个非常常见的陷阱。
在大多数情况下,如果您需要使用let
的范围来实现某些无法使用var
进行的操作,则几乎总是有迹象表明这是错误的。
此外,不要依赖let
的可变提升。如果您使用的变量以前从未声明过,那么它很容易出错。
通常,请尝试遵循您遵循的样式指南。如果您没有特别的样式指南,请尝试使用AirBnB:https://github.com/airbnb/javascript
这里提到了“永远不要使用var
和使用var
”:https://github.com/airbnb/javascript#variables
答案 2 :(得分:0)
let
和var
在要全局定义变量或在整个函数本地定义变量时,无论块范围如何,都应使用var
。用var
关键字分配的变量具有功能范围。无法在函数外部访问该变量。
并且,您应该使用let
来声明变量,这些变量的作用域仅限于使用它的块,语句或表达式。在块内使用时,let
将变量的范围限制为该块。
用let
分配的变量与用var
定义的变量非常相似。主要区别在于范围。这已在上面引用。用let分配的变量具有块作用域。这意味着可以在该块和任何子块中看到该变量。用var
分配的变量具有功能范围,并忽略块作用域规则。用let
分配的变量不能声明,只能重新分配。
根据此article,仅当您知道变量将具有动态值时,才使用
let
关键字。您可能不再需要使用var
答案 3 :(得分:0)
很显然,您知道let
和var
之间的区别,并且您的问题是在哪里使用?
首先,如果您想寻求更好的性能,请use let在任何可能的地方。但是,您必须注意,某些旧的浏览器可能无法处理let
。
第二,我认为对您的问题的最佳和最短答案是“尽可能使用let
,如果不能使用var
”。
如果您深入研究let
和var
之间的差异,可以找出应该使用var
而不是let
的地方,我建议您阅读{ {3}}。