学习es6_let const

本文详细解析了JavaScript中let和const关键字的特点与使用规范,包括它们的作用域特性、变量声明规则及与传统var声明的区别。并通过示例展示了let与const在解决变量提升问题和避免重复声明方面的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

for (let i = 0; i < 3; i++) {
  let i = 'abc';
  console.log(i);
}
VM296:3 abc

1、因为let申明的变量只在他的代码块有效 所以,不会报错  for循环里面的 i 和for循环的 i 不是同一个 i

2、let不存在变量提前 但是很奇怪的是在代码块内,使用let命令声明变量之前,该变量都是不可用的。语法上都成为“暂时性死区”(temporal dead zone,简称 TDZ)。

所以搞笑的是typeof也不是一个百分之一百安全的操作

typeof x; // ReferenceError
let x;

3、let不允许在同一个相同的作用域内,重复声明一个变量。

let c=10;
var c=1;
或者
var c=10;
let c=1;
或者
let c=10;
let c=1;

都会报错

(function () {
  var tmp = ...;
  ...
}());   //es5块级作用域的写法

// 块级作用域写法
{
  let tmp = ...;
  ...
}

const 作用域和let相同  只是const一旦声明变量不得改变值;

const也存在暂时性死区,只能在声明的位置后面使用。

const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址不得改动。对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指针,const只能保证这个指针是固定的,至于它指向的数据结构是不是可变的,就完全不能控制了。因此,将一个对象声明为常量必须非常小心。

const a = [];
a.push('Hello'); // 可执行
a.length = 0;    // 可执行
a = ['Dave'];    // 报错

4 const 和 let声明的变量不会添加到全局对象上。

let b = 1;
window.b // undefined

const b = 1;
window.b // undefined

  

转载于:https://www.cnblogs.com/yudabing/p/7160832.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值