Javascript的预解析

浏览器不是直接运行JS的,是调用js引擎运行js.

js引擎运行js分为两个步骤:

1.预解析 :js引擎会把js里面所有的var,以及所有的function提升到当前作用域的最前面

2.代码执行 :按照代码的书写顺序从上往下执行

 

预解析:

变量预解析--变量提升,就是把所有的变量声明提升到当前的作用域的最前面,不提升赋值操作

函数预解析--函数提升,就是把所有的函数声明提升到当前作用域的最前面,不调用函数.

尤其注意 两种函数声明方式在预解析中的不同

# 两种不同的函数声明方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<script>
    // 函数的2中声明方式
    // 1. 利用函数关键字自定义函数(命名函数)
    function fn() {
 
    }
    fn();
    // 2. 函数表达式(匿名函数)
    // var 变量名 = function() {};
    var fun = function(aru) {
        console.log('我是函数表达式');
        console.log(aru);
 
    }
    fun('老师');
    // (1) fun是变量名 不是函数名 
    // (2) 函数表达式声明方式跟声明变量差不多,只不过变量里面存的是值 而 函数表达式里面存的是函数
    // (3) 函数表达式也可以进行传递参数
</script>

 

# 函数预解析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<script>
    // 1问 
    console.log(num);
 
 
 
    // 2
    console.log(num); // undefined  坑 1
    var num = 10;
    // 相当于执行了以下代码
    // var num;
    // console.log(num);
    // num = 10;
 
 
 
    // 3问 
    function fn() {
        console.log(11);
    }
    fn();
 
 
 
 
    // 4
    fun(); // 报错  坑2
    var fun = function() {
            console.log(22);
 
        }
        // 函数表达式 调用必须写在函数表达式的下面
        // 相当于执行了以下代码
        // var fun; 变量提升,因为此时是变量代表函数
        // fun();
        // fun = function() {
        //         console.log(22);
 
    //     }
 
    // 1. 我们js引擎运行js 分为两步:  预解析  代码执行
    // (1). 预解析 js引擎会把js 里面所有的 var  还有 function 提升到当前作用域的最前面
    // (2). 代码执行  按照代码书写的顺序从上往下执行
    // 2. 预解析分为 变量预解析(变量提升) 和 函数预解析(函数提升)
    // (1) 变量提升 就是把所有的变量声明提升到当前的作用域最前面  不提升赋值操作
    // (2) 函数提升 就是把所有的函数声明提升到当前作用域的最前面  不调用函数
</script>

  

posted @   EricYJChung  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示