Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中哪里使用'var'和'let'?(不问区别)_Javascript_Ecmascript 2017 - Fatal编程技术网

在javascript中哪里使用'var'和'let'?(不问区别)

在javascript中哪里使用'var'和'let'?(不问区别),javascript,ecmascript-2017,Javascript,Ecmascript 2017,我已经读了我的博客关于var和let。我看到的是这个 var是一个函数或全局范围变量,具体取决于定义它的位置 在哪里 设为块作用域变量 所以在很多文章中,我看到他们建议使用let而不是var。我理解这一点,因为它消除了变量范围的冲突 所以我想问在哪里使用let,在哪里使用var?如果可能,请提供相关链接。如果我去推荐,我就得到处使用let 我的理解是这样的 let应在for循环中使用,因为它创建了自己的词法范围 for(let i =0;i<5;i++){ setTimeout(fun

我已经读了我的博客关于var和let。我看到的是这个

var是一个函数或全局范围变量,具体取决于定义它的位置

在哪里

设为块作用域变量

所以在很多文章中,我看到他们建议使用let而不是var。我理解这一点,因为它消除了变量范围的冲突

所以我想问在哪里使用let,在哪里使用var?如果可能,请提供相关链接。如果我去推荐,我就得到处使用let

我的理解是这样的

let
应在for循环中使用,因为它创建了自己的词法范围

for(let i =0;i<5;i++){
  setTimeout(function(){
   console.log(i);  
  },100);
}

for(让i=0;i现在只使用
let
基本上是正确的

在几乎所有情况下,
let
是一种更好的方法,或者至少相当于
var
,因为泄漏声明会使您编写容易出错的代码。避免使用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) })
}
for(变量i=0;i<6;i++){
document.getElementById('my-element'+i)
.addEventListener('click',function(){alert(i)})
}
与本守则相反:

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) })
}
for(设i=0;i<6;i++){
document.getElementById('my-element'+i)
.addEventListener('click',function(){alert(i)})
}
第一个示例生成一个闭包,该闭包捕获由
var
定义的
i
,而另一个示例生成不同的
i
值。第一个示例生成每个回调警报6,因为它们都指向同一个对象。但是,第二个示例中的
let
在每次迭代时生成一个新的块范围。This解决了javascript中一个非常常见的陷阱

在大多数情况下,如果您需要使用
var
的作用域来实现使用
let
无法实现的功能,那么几乎总是一个迹象表明某些功能出错

另外,不要依赖于
var
的变量提升。如果您使用的是以前没有声明的变量,那么它很容易出错

大多数情况下,请尝试遵循您遵循的样式指南。如果您没有遵循的特殊样式指南,请尝试AirBnB:
这里提到了“永远不要使用
var
和使用
let
”这句话:

现在只使用
let
基本上是正确的

在几乎所有情况下,
let
是一种更好的方法,或者至少相当于
var
,因为泄漏声明会使您编写容易出错的代码。避免使用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) })
}
for(变量i=0;i<6;i++){
document.getElementById('my-element'+i)
.addEventListener('click',function(){alert(i)})
}
与本守则相反:

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) })
}
for(设i=0;i<6;i++){
document.getElementById('my-element'+i)
.addEventListener('click',function(){alert(i)})
}
第一个示例生成一个闭包,该闭包捕获由
var
定义的
i
,而另一个示例生成不同的
i
值。第一个示例生成每个回调警报6,因为它们都指向同一个对象。但是,第二个示例中的
let
在每次迭代时生成一个新的块范围。This解决了javascript中一个非常常见的陷阱

在大多数情况下,如果您需要使用
var
的作用域来实现使用
let
无法实现的功能,那么几乎总是一个迹象表明某些功能出错

另外,不要依赖于
var
的变量提升。如果您使用的是以前没有声明的变量,那么它很容易出错

大多数情况下,请尝试遵循您遵循的样式指南。如果您没有遵循的特殊样式指南,请尝试AirBnB:
这里提到了“永远不要使用
var
和使用
let
”这句话:

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

const
表示无法重新分配标识符

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

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

我没有在ES6中使用
var
。循环的块范围中有值,但我想不出我更喜欢
var
而不是
let

const
表示标识符不会被重新分配

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

var
现在是在JavaScript中定义变量时可用的最弱信号可用。变量可能或不可被重新分配,并且该变量可能或不可用于整个函数,或仅用于循环


我希望我回答了你的问题,任何困惑都请告诉我。

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

const
表示无法重新分配标识符

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

我使用
let