区分var、let 和 const 笔记

本文深入探讨JavaScript中var、let和const关键字的区别,包括变量提升、块级作用域、重复声明的问题,以及它们如何影响变量的生命周期和全局对象。
var
  1. var 有变量提升机制
console.log{abc};//undefined
var abc = 1;

可以访问到 变量 abc,但是因为在变量未初始化之前进行了访问,所以只能拿到 undefined;

  1. var 在声明全局作用域时,会自动创建一个全局对象属性,也就是 window 的对象,所以使用 var 进行声明时, 如果存在相同的变量属性,那么后者会覆盖前者。
for(var i=0;i<10;i++){
            var a = i; 
        }
        console.log(a);//9

变量 a 被重复赋值,且在循环外部也可以拿到。

let

为了弥补 var 的缺陷,在ES6 中引入了块级声明(let 和 const),块级声明让所声明的变量在指定块级作用域外,无法被访问,让变量的生命周期更加可控。

for(let i=0;i<10;i++){
            let a = i;
        }
        console.log(a);// Uncaught ReferenceError: a is not defined

同时 let 声明的变量也不能重复赋值,否则会报错。

let age = 20;
let age = 21;//Uncaught SyntaxError: Identifier 'age' has already been declared

let 在全局作用域中,不会在全局 window 对象上创建一个属性。

var a = 10;
console.log(window.a === a);//true

let b = 20;
console.log(window.b === b);//false
const

const 继承了 let 的特点,但通过 const 声明的变量为基础数据类型时,它是不可变的,当它声明的变量为引用类型时,可以修改它的属性,如果要确保引用类型值的属性值不可变,要使用 Object.freeze() 冻结。

let a = '10';
a = '20';
console.log(a);//20

// const b = '20';
// b = '30';
// console.log(b);//报错

const dog = {
    name:'旺财'
}

dog.name = '二哈';
console.log(dog.name)//二哈
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值