域解析当中的两个提升

24 阅读2分钟

前言

下面所讲的概念只是简单让大家在脑海中有一个基本的概念,如果哪里有误,或者理解不了,也欢迎朋友们指正或讨论。

域解析

在了解变量提升同函数提升前,我们需要知道一个东西,它叫域解析

在js代码运行的时候,他会有这样的一个运行顺序

先进行域解析,再对代码进行执行

域解析会将js中所有var同function 提升到当前作用域的最前面

进行代码的执行,对代码进行一个从上到下执行过程

变量提升和函数提升

而域解析分为变量域解析同函数域解析,也就是变量提升和函数提升。

首先,我们来了解一下变量提升

变量提升:就是将所有的变量声明提升到当前作用域的最前面 并且!不提升变量的赋值操作

然后是函数提升

函数提升:就是将所有的函数声明提升到当前作用域的最前面 并且!不调用函数

有些小伙伴不太清晰的话,也可以连同下面的例子一起理解

举例

例子1

例如下面代码()

 <script>
        console.log(asd);
        var asd = 123;
        //域解析后相当于
        // var asd;
        // console.log(asd);
        // asd = 123; 
    </script>

这里明显是变量提升,控制台结果如下

屏幕截图 2023-11-01 200604.png

输出undefined ,表示尚未初始化的变量的值,上方变量在声明后直接打印,而赋值操作在打印时还未执行

例子2

那么,你也就能看懂一下代码的区别了

<script>
        // 1.
        asd();
        var asd = function () {
            console.log(123);
        }
        
        // 2.
        var asd = function () {
            console.log(123);
        }
        asd();
    </script>

综上,我们也就可以认识到,函数调用是应当写在函数表达式下面的

byby