var let const(经典面试篇)

本文探讨了JavaScript中var、let和const的区别,包括变量提升、局部作用域以及const声明的特殊性。对于const,文章指出它必须初始化,并且其值(引用类型)的地址不变,但对象内容可修改。此外,还预告了关于数组和对象深浅拷贝的面试题目。

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

var let const的区别

一)var声明变量存在变量提升,let和const不存在变量提升
二)let、const都是块级局部变量
三)同一作用域下let和const不能声明同名变量,而var可以

那么笔试题

for(let i=0;i<5;i++){
      setTimeout(function(){
        console.log(i);
      },0)
    }
    console.log(i);

输出:5 0 1 2 3 4

	for(var i=0;i<5;i++){
      setTimeout(function(){
        console.log(i);
      },0)
    }
    console.log(i);

输出:5 5 5 5 5 5

这里是为什么呢?
其实我们可以把let声明的变量,它的局部定义域理解为闭包,就是把这个变量在函数声明的同时,给到它的父级域里面使它保存下来,我说的可能有点抽象,不对的地方请指正

但其实到这里这三个还是没有结束,因为还有一个特殊的const的作用,正所谓存在即合理,自然有它的特点,

const

这里独特强调一下,因为我认为我准备够充分了,但还是被面试官小姐姐问蒙了,

小姐姐问:const 声明一个变量必须给它赋值吗?

答:必须,不赋值会报错

问:const声明的值能改变吗?

答:不可以,重新赋值会报错

问:那如果给它一个数组或者对象,去修改对象里面的属性或者数组里面的值呢?

答:???还有这操作呢?没用过呀

问:那你回家再看看吧,我们公司不适合你(玩笑话)

然后完了我仔细看了下,原来这基本数据类型和引用数据类型放在栈中是不一样的,基本数据类型会放一个值,而引用数据类型是放的一个地址,这我虽然知道,可我从未这么去想过const,浅薄了,浅薄了,那么这也就迎刃而解了

const声明的变量的值,对引用类型而言放的是一个地址,地址并不会变,但地址所对应的那个数组对象是可以修改的

提到栈,又想到了数组和对象的深浅拷贝的面试题,下次讲解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值