javascript变量提升

本文探讨了JavaScript中的变量提升问题,包括其定义、危害以及如何在ES6中通过let和const来解决这一问题。变量提升可能导致全局变量冲突,影响团队协作。ES6引入的块级作用域和let、const声明有效地避免了这个问题。文章还提到了在面试中可能遇到的变量提升相关问题。

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

前言:

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

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

一、什么是变量提升?

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

/**
*变量提升
*/

//此处变量为定义的情况下,直接报错
(function () {
    console.log(obj);//Uncaught ReferenceError
})();


//变量定义后,顺序不正确打印undefined
(function(){
    console.log(obj); //undefined
    var obj;
})();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值