‘let‘ 与 ‘var‘:实际区别是什么?

        这是一个快速阅读可能会派上用场的 JavaScript 中的letvs之间的区别var。了解这些以决定在您的实现中使用什么是很好的。

范围

        双方varlet在不同范围。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变量作为属性添加到全局对象中。全局对象位于windowWeb 浏览器和globalNode.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变量没有。要了解时间死区,让我们检查varlet变量的             生命周期,它们有两个步骤:创建和执行。

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>

 

希望这能给您一些关于如何决定在哪种情况下使用什么的好主意。
 七爪网源码交易平台_成品网站源码_小程序源码-七爪网

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值