JavaScript的解析顺序对函数有何影响?

博客介绍了JavaScript中函数的定义方式,包括声明式函数和赋值式函数,且二者执行顺序不同。还阐述了JavaScript的解析顺序,分为预编译期与执行期,预编译期会对声明的变量和声明式函数预处理,执行阶段则逐行执行代码。

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

1.函数的定义方式

        我们都知道,在JavaScript中有两种定义函数的方式,分别为声明式函数和赋值式函数,但是两种函数在执行顺序却有不同。

比如:

声明式

<script>
    fn();       //      1
    function fu(){
        console.log(1)
    }
</script>

赋值式

<script>
    fn();       // fn is not a function
    var fn = function(){
        console.log(1)
    }
</script>

        在声明式的函数中,函数在未定义之间执行没有任何问题,会在控制台中打印1,但是赋值式的就会报错,会告诉你fn不是一个函数,这是为什么呢?这就要从JavaScript的解析顺序说起。

2.JavaScript解析顺序

JavaScript解析顺序分为预编译期与执行期。

       也就是说JavaScript在执行代码之前会先进行预编译,在预编译期JavaScript会对本代码块中所有声明的变量和函数进行预处理,需要注意的是这里面只会将变量进行声明,但不进行初始化赋值,而且这里面处理的函数是声明式的函数。

举个例子:

<script>
    fn();
    var a =3;
    function fn(){
        console.log(1)
    };
    b();
    var b = function(){
        console.log(1)
    }
</script>

       JavaScript在处理上面的代码时,先预编译,简单理解,就是将所有变量声明和声明式函数先读一遍,也就是说在代码执行之前,JavaScript已经知道这段代码中有两个变量a,b和一个函数体fn可以这样理解Javascript先建立一个仓库把他们存起来。

<script>
    // 预编译阶段
    var a,
    var b,
    function fn(){
        console.log(1)
    };
</script>

接下来就是执行阶段,执行阶段就没什么好说的了,就是代码一行一行执行

<script>
    // 预编译阶段
    var a,
    var b,
    function fn(){
        console.log(1)
    };
    //执行阶段
    fn();        //结果打印: 1
    a =3;        //将a进行初始化复制
    b();        // 发现仓库里有b,但此时b为初始化赋值前,是undefined,不是一个函数,
这里就会报错, b is not a function 
    b = function(){   // 给b赋值一个函数,但是因为上一行代码出错,这里将停止执行
        console.log(1)
    }
</script>

如果有其他疑问或是看法可以在评论里或投稿跟小编进行讨论,
也可以关注微信公众号【筑梦前端】进行投稿,与小编一起探讨更多的编程知识。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值