var和let的区别

文章讨论了JavaScript中var和let声明变量的区别,包括变量提升和块级作用域的影响。在处理函数返回值依赖于数组下标的情况时,由于var没有块级作用域导致的问题,以及如何通过使用let来解决这个问题。同时提到let的使用可以防止全局变量污染,并且不允许重复声明,是更安全的定义变量方式。

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

var和let都是用于定义变量,区别如下

变量提升

var存在变量提升(变量自动提前声明),而let不存在变量提升

console.log(age)   //undefined
var age=18

这是因为var 存在变量提升,等价写法如下

var age
console.log(age)  //undefined
age=18

而let不存在变量提升

console.log(age)  //报错
let age=18

报错结果如下

块级作用域

var 不存在块级作用域,而let存在块级作用域

    if(1===1){
        var name="zs"
       }
      console.log(name); //zs
  if(1===1){
        let name="zs"
       }
       console.log(name);
//不在同一块级作用域,不能访问到name的值

现在有这样一个需求:数组的每一项都是同一个函数,而函数的返回值由数组的下标决定

   const arr=[]
     for(var i=0;i<10;i++){
        arr[i]=function(){
            return i
        }
        console.log(arr[i]);
     }

打印结果如下

进行函数调用时,发现结果跟我们想的不一样

    console.log(arr[5]());   //结果为:10

这是为什么呢?这是因为var 不存在块级作用域,当for循环执行完毕后,i的值变为了10,而进行函数调用时的i不再是数组的下标,而都是10。

解决方法就是将var 改变成let

   const arr=[]
     for(let i=0;i<10;i++){
        arr[i]=function(){
            return i
        }
        console.log(arr[i]);
     }
     console.log(arr[5]());    //结果为5

这是因为for循环时,每一个i都有自己的块级作用域,不会进行污染。


作用:不会污染全局变量

let RegExp = 20
console.log(RegExp);
console.log(window.RegExp);

重复声明

var 可以重复声明变量,而let不能重复声明变量

重复声明会覆盖之前的变量,容易带来问题

总结

现在定义变量,应该避免使用var,而是应该使用let

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值