前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >let和var和const

let和var和const

作者头像
ZEHAN
发布2020-09-24 10:07:09
5690
发布2020-09-24 10:07:09
举报
文章被收录于专栏:前端开发ZEHAN前端开发ZEHAN

let和var有哪些区别

举个例子

代码语言:javascript
复制
var arr = [];
        for(var i = 0; i < 2; i++){
            arr[i] = function () {
                console.log(i);
            }
        }
        arr[0](); //2
        arr[1](); //2

打印结果两次都为2

当把所有的var改成let

代码语言:javascript
复制
 let arr = [];
        for(let i = 0; i < 2; i++){
            arr[i] = function () {
                console.log(i);
            }
        }
        arr[0](); //0
        arr[1](); //1

打印结果为

总结

第一段代码中函数在执行时,是找不到变量i的值的,所以要往上一层作用域中找 他的上一层作用域是全局作用域,也就是不符合循环条件的值 为 2

第二段代码中函数在执行时,他的上一级作用域是块级作用域,通过let声明依次生成了两个块级作用域,因此arr[0]();arr[1](); 依次在他们各自的块级作用域中找变量i,分别为0和1

由此可以得出结论

var 和 let 第一点不同就是 let 是块作用域,即其在整个大括号 {} 之内可见。如果使用 let 来重写上面的 for 循环的话,会报错 var:只有全局作用域和函数作用域概念,没有块级作用域的概念。但是会把{}内也假称为块作用域。 let:只有块级作用域的概念 ,由 { } 包括起来,if语句和for语句里面的{ }也属于块级作用域。

另外const特点

const声明的变量也具有块级作用域且必须赋值且不可更改他的值(这里指数据内存地址

复杂数组可以通过数组下标的方式arr[i]更改,但不可以重新声明赋值,这样会改变内存地址

let和const都不存在变量提升

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-09-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档