Javascript学习之函数预解析

目录

1、预解析

2、var关键字的预解析

3、赋值式函数的预解析

4、声明式函数的预解析


1、预解析

(1)预解析就是聊聊代码的编译和执行

(2)JS是一门解释型语言,在代码执行之前,会先对代码进行通读和解释,然后再执行代码

(3)也就是说JS代码在运行的时候,会经历两个阶段“解释代码”和“执行代码”

2、var关键字的预解析

先看两个例子:

(1)定义变量myName,并在变量定义之前就调用一次该变量

<script>
    console.log(myName)    // myName变量在后文中被定义和赋值
    var myName="abc"
    console.log(myName)
</script>

输出如下:

(2)但如果调用的是一个在后文中也没有被定义和赋值的变量时:

<script>
    console.log(myAge)       // myAge变量在后文并没有被定义和赋值
    var myName="abc"
    console.log(myName)
</script>

输出如下:第一次输出时变量myAge未被定义也未被赋值,所以会报错

 综上,在预解析时,会先把var关键字定义的变量都放到最前面先声明一下,及上述第一个例子经过var预解析会变成类似如下形式:

var myName
<script>
    console.log(myName)
    myName="abc"
    console.log(myName)
</script>

所以在第一个例子中由于myName变量的定义在预解析时被提到了前面,所以第一次调用时会输出undefined,表明myName变量此时只被定义了还未被赋值。

3、赋值式函数的预解析

赋值式函数预解析同var关键字预解析一样,会先把函数声明提到最前面,因为赋值式函数也是利用var关键字定义的。举例说明:

<script>
    fn()
    var fn=function(){
        console.log("fn")
    }
    fn()
</script>

输出如下:由于在预解析时只把函数声明提到了前面(把var fn提到前面),所以第一次调用时fn只是一个普通变量,还未被定义为函数,所以在调用fn()时会出错

4、声明式函数的预解析

<script>
    test()
    function test(){
        console.log("test")
    }
    test()
</script>

 输出如下:

 所以,对于声明式函数,会在预解析时把声明式函数提到前面。上述声明式函数在预解析时会变成类似如下形式:

function test(){
    console.log("test")
}
<script>
    test()
    test()
</script>

所以在第一次调用test()时,就能输出test

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值