javascript变量提升

前言:

JavaScript语言与其他语言非常不同,它一切的操作都是基于原型链,这是javascript的精髓。但是由于javascript定义了一个全局作用域,并把全局作用域绑定到了顶层对象中(浏览器环境中顶层对象是window,在node环境下顶层对象是global),顶层对象的属性与全局变量挂钩,被认为是 JavaScript 语言最大的设计败笔之一。由于顶层对象可以属性可以随意的修改新增,很不利于模块化开发或者团队合作开发。另外全局变量的定义没办法在编译期间检查变量是否未定义,因为无法确定一些全局属性是否由于顶层api操作而生成。

变量提升也是javaScript语言中非常大的一个问题,往往会将变量泄露到全局作用域,在团队协同开发中,经常会出现互相冲突替换的问题。因此es6又提出了块级作用域以及let、const声明方式,到此才解决了变量提升的问题

一、什么是变量提升?

在大量的编程语言中,变量或者函数都要求先定义后使用,而在javascript中存在变量提升和函数提升,因此产生了许多不同的行为。变量提升及变量定义后会将变量提升到作用域链的最顶端,如果未指定值,即得到undefined值。变量提升是为了生成便于管理的作用域链,作用链中包含函数执行的上下文(javascript作者对该语言的设计)。至于函数提升,也同变量提升一样,函数会提升到作用域链顶端,但比变量作用域提升的更高。

/**
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值