js的var和let定义变量的坑

1.

知识点:

var的声明将被提升到到函数的顶部

letconst声明可以让变量在其作用域上受限于它所使用的块、语句或表达式。与var不同的是,这些变量没有被提升,并且有一个所谓的暂时死区(TDZ)。试图访问TDZ中的这些变量将引发ReferenceError,因为只有在执行到达声明时才能访问它们。

例子:

var a = 10; // 全局使用域
function foo() {
    // var a 的声明将被提升到到函数的顶部。
    // 比如:var a
    console.log(a); // 打印 undefined

// TDZ 开始 创建了未初始化的'aa'

   console.log(aa); //直接报错:Uncaught ReferenceError: Cannot access 'aa' before initialization

// TDZ 开始 创建了未初始化的'letTest'

   console.log(letTest); //运行时候直接报错: Uncaught ReferenceError: Cannot access 'letTest' before initialization
   // 实际初始化值20只发生在这里
    var a = 20; 

// TDZ结束,letTest 仅在此处初始化,值为test let OK

    let letTest = 'test let OK.'; //let 声明的变量只在 let 命令所在的代码块内有效。

// TDZ结束,'a'仅在此处初始化,值为20

    const aa = 20;
}

结论:建议少用var定义变量。定义变量时可以使用let,定义常量时可以使用const

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值