前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用const/let声明的全局变量不见了?

使用const/let声明的全局变量不见了?

作者头像
用户2802329
发布2020-03-05 11:26:51
1.4K0
发布2020-03-05 11:26:51
举报
文章被收录于专栏:Android先生

在ES5中,顶层对象的属性与全局变量是等价的,所以使用 varfunction 声明的全局属性都是属于顶层对象的属性,而在JS中顶层元素就是 window,所以可以通过 window 来获取声明的全局属性:

顶层对象属性

首先我们要知道 constlet 都是在ES6才出的关键字,在ES6之前是没有的,而且在ES6中,新增了一个块级作用域的概念,还有一点就是,使用 var 关键字定义的变量会提升到window;我们先举几个例子来说明一下什么是块级作用域:

代码语言:javascript
复制
var a = "外层变量"

function test1() {
    console.log(a) // 外层变量
}

// var会变量提升,提升到函数的最上面,就相当于现在函数中声明了a
// 然后在if中初始化了a,需要注意的是,变量提升只提升声明,不提升初始化
function test2() {
    console.log(a) // undefine
    if (false) {
        var a = "内层变量"
    }
    console.log(a) // 输出 undefine(若上面的if条件是true的话则输出 内层变量)
}

// let不会变量提升,所以函数内的a只在if中有效果
function test3() {
    console.log(a) // 外层变量
    if (false) {
        let a = "内层变量"
    }
    console.log(a) // 外层变量
}

两个大括号之间的就称之为一个块,块级作用域也就指的是在当前大括号内声明的变量只在当前大括号中有用,出了大括号就访问不到了,我们来看一下使用 const/let 声明的变量能不能用顶层对象访问到:

非顶层对象属性

我们可以看到,使用 const/let 声明的全局变量,不属于顶层对象的属性,访问不到,那么他们存在于哪里呢?怎么能获取到呢?

const/let声明的变量

我们可以看到,使用console.dir打印了Function中所有的属性与方法,我们用 const/let 声明的对象存在于这里面,这个Function是个什么东西呢?前面我们说到块级作用域,函数内部都是属于块级作用域,所以最后的结论就是 const/let 声明的全局变量存在于块级作用域中。同时也能看出,从ES6开始,全局变量将慢慢的与顶层对象的属性脱离关系。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT先森养成记 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档