这是一个快速阅读可能会派上用场的 JavaScript 中的let
vs之间的区别var
。了解这些以决定在您的实现中使用什么是很好的。
范围
双方var
并let
在不同范围。var
作用域为立即封闭函数,而let
作用域为立即封闭块。
例子:
<span style="background-color:#f2f2f2"><span style="color:rgba(0, 0, 0, 0.8)"><span style="color:#292929">function run() {
var first = "First";
让第二个 = "第二";
控制台日志(第一,第二);// First Second
{
var third = "Third"
let Fifth = "Fourth";
控制台日志(第三,第四);// 第三第四
}
console.log(third); // 第三个
console.log(fourth); // 引用错误
}
run();</span></span></span>
创建全局属性
全局var
变量作为属性添加到全局对象中。全局对象位于window
Web 浏览器和global
Node.js 上:
<span style="background-color:#f2f2f2"><span style="color:rgba(0, 0, 0, 0.8)"><span style="color:#292929">无功计数器 = 0;
控制台日志(窗口。计数器);<em>// 0</em></span></span></span>
但是,let
变量不会添加到全局对象中:
<span style="background-color:#f2f2f2"><span style="color:rgba(0, 0, 0, 0.8)"><span style="color:#292929">让计数器 = 0;
控制台日志(窗口。计数器);<em>// 不明确的</em></span></span></span>
重新申报
该var
关键字允许您重新声明变量而不会出现任何问题:
<span style="background-color:#f2f2f2"><span style="color:rgba(0, 0, 0, 0.8)"><span style="color:#292929">无功计数器 = 10;
var counter = "abcd";
控制台日志(计数器);<em>// A B C D</em></span></span></span>
但是,如果使用let
关键字重新声明变量,则会出现错误:
<span style="background-color:#f2f2f2"><span style="color:rgba(0, 0, 0, 0.8)"><span style="color:#292929">让计数器 = 10;
让柜台; <em>// 错误</em></span></span></span>
时间死区
该let
变量有时间的盲区,而var
变量没有。要了解时间死区,让我们检查var
和let
变量的 生命周期,它们有两个步骤:创建和执行。
var 变量
- 在创建阶段,JavaScript 引擎为
var
变量分配存储空间并立即将它们初始化为undefined
. - 在执行阶段,JavaScript 引擎为
var
变量分配由赋值指定的值(如果有)。否则,var
变量保持未定义。
let 变量
- 在创建阶段,JavaScript 引擎为
let
变量分配存储空间但不初始化变量。引用未初始化的变量将导致ReferenceError
. - 该
let
变量具有相同执行阶段的var
变量。
时间死区从块开始,直到处理完let
变量声明。换句话说,它是您无法let
在定义变量之前访问变量的位置。[链接]
吊装
用 var 声明的变量被提升,如下所示。在此示例中,声明将使用未定义的值提升,但稍后不 会进行初始化。
<span style="background-color:#f2f2f2"><span style="color:rgba(0, 0, 0, 0.8)"><span style="color:#292929">函数 checkVarScope() {
console.log(varScope); // 未定义
var varScope = "Var Scope";
控制台日志(varScope);// 变量范围
}
checkVarScope();</span></span></span>
虽然没有提升用 let 定义的变量。let
变量在其定义被评估之前不会被初始化。在初始化之前访问它们会导致ReferenceError
.
<span style="background-color:#f2f2f2"><span style="color:rgba(0, 0, 0, 0.8)"><span style="color:#292929">函数 checkLetScope() {
console.log(letVar); // "未捕获的 ReferenceError:初始化前无法访问 ' letVar '"
let letVar = "Let Variable";
控制台日志(letVar);// 让变量
}
checkLetScope();</span></span></span>
希望这能给您一些关于如何决定在哪种情况下使用什么的好主意。
七爪网源码交易平台_成品网站源码_小程序源码-七爪网