动画:面试官问我 JS「变量提升」我头皮发麻,最后把这篇动画甩给了他
写在前边 某一外包公司小李,刚刚入门前端之后,老板就让他写一段前端 JS 项目代码,不料,这时之前学过Java的小李遇到了一个问题,对于经常写 Java代码的小李来说,这属于一个灵异事件。项目中的一段代码如下: 小李越想越感到纳闷,明明我在打印之前,没有声明任何的变量呀,为什么还能使用未声明的变量,从而打印出 a 的值呢,是不是我的编译器出现了问题?遇到问题的小李,越想越奇怪,就又写了一段测试代码。 按理说应该输出undefined呀,为什么会输出的结果为 10。小李越想越奇怪,到底哪里出现问题了。这时老板过来了,看了看代码,笑了笑说,你还是去先学学基础吧。就这样,小李在网上找到了小鹿的这篇教程,学完之后,才恍然大悟。 思维导图 1、什么是变量提升? 我们首先要弄明白什么是变量提升?顾名思义,从表面上的意思去分析,代码在真正的执行之前变量就已经进行了提升声明。是的,确实是这么个意思,但是我们后边的原理部分说的这种所谓的“提升”却不是真正的提升,而是为了让开发者便于理解,才有了变量提升这以名词,话说到这,那么它是如何进行提升的呢? 我们还是用小李的例子,第一个例子如下: 首先,程序执行,首先将声明的变量提升到最前边,a 变量就会被提升到最前边,但是并不会进行赋值操作,变量提升完毕之后,代码自上而下顺序执行。输出 a 的值,a 此时没有被赋值,所以输出 undefined,继续执行,a