在JavaScript中在哪里使用`var`和在哪里`let`? (不问差异)

时间:2018-10-10 06:03:58

标签: javascript ecmascript-2017

我已经阅读了有关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并仅用作块范围?请提供任何推荐的链接,其中描述了哪里以及为什么更好?

谢谢。

4 个答案:

答案 0 :(得分:3)

单个标识符只能用于表示单个概念。(良好的编程技巧)

const表示不能重新分配

如果您不需要重新分配,则const应该是let的默认选择,因为您希望用法在代码中尽可能清晰。

当我需要重新分配变量时,我使用let。因为,我用一个变量代表一件事,所以let的用例往往是for循环或数学算法

我不在ES6中使用var。循环的块作用域是有价值的,但是我无法想到我更喜欢var胜过let的情况。

const是一个信号,表明不会重新分配标识符

let,表示该变量可能被重新分配,例如循环中的计数器或算法中的价值互换。它还表明该变量将仅在定义中使用,而该块并不总是完整的包含函数。

现在,当您在JavaScript中定义变量时,

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)

letvar

在要全局定义变量或在整个函数本地定义变量时,无论块范围如何,都应使用var。用var关键字分配的变量具有功能范围。无法在函数外部访问该变量。

并且,您应该使用let来声明变量,这些变量的作用域仅限于使用它的块,语句或表达式。在块内使用时,let将变量的范围限制为该块。

let分配的变量与用var定义的变量非常相似。主要区别在于范围。这已在上面引用。用let分配的变量具有块作用域。这意味着可以在该块和任何子块中看到该变量。用var分配的变量具有功能范围,并忽略块作用域规则。用let分配的变量不能声明,只能重新分配。

  

根据此article,仅当您知道变量将具有动态值时,才使用let关键字。您可能不再需要使用var

答案 3 :(得分:0)

很显然,您知道letvar之间的区别,并且您的问题是在哪里使用?

首先,如果您想寻求更好的性能,请use let在任何可能的地方。但是,您必须注意,某些旧的浏览器可能无法处理let

第二,我认为对您的问题的最佳和最短答案是“尽可能使用let,如果不能使用var”。

如果您深入研究letvar之间的差异,可以找出应该使用var而不是let的地方,我建议您阅读{ {3}}。

相关问题