JavaScript入门(四)-预编译(函数内)

JavaScript入门(四)-预编译(函数内)

一、预编译前置知识-全局变量

  1. imply global 暗示全局变量:即任何变量,未经声明就赋值,此变量为全局对象所有。
    //以下三种方式效果相同
    a = 10;

    window.a = 10;

    window {
        a : 10;
    }

    function test() {
        var b = a =10;//此时a声明就赋值,为全局变量,b不是
    }
  1. 一切的声明的全局变量,全是windows的属性,
    var a = 10;//效果等价1
    var b = 20;
    //在全局范围内访问a的话就是相当于访问window.a,b同理。

window 全局变量的对象,window即为全局变量的域。

二、预编译

预编译:在代码逐行执行前,先进行的编译,在执行中不再重复执行。

先上,简单口诀

  1. 函数声明整体提升
  2. 变量 声明提升

示例函数

//预编译发生在函数执行的前一刻
//以此为例,分析结果

    function test(a, b){
        console.log(a);
        console.log(b);
        var b = 234;
        console.log(b);
        a = 123;
        console.log(a);
        function a (){}
        var a;
        b = 234;
        var b = function(){}
        console.log(a);
        console.log(b);
    }
    test(1);

步骤:

    1. 创建AO对象 Activation Object (执行上下文)
    1. 找形参和变量声明,将变量声明和形参的名作为AO的属性名,值为undefined。
    1. 将实参和形参相统一
    1. 找函数体内的函数声明,将函数名作为属性名,将函数作为属性值。

以下为步骤解释

    // 第一步
    AO {
        
    }

    //第二步
    AO {
        a : undefined,
        b : undefined,
    }

    //第三步,test(1)这里只有a被有实参
    AO {
        a : 1,
        b : undefined,
    }

    //第四步,b为表达式,并不是声明b对象的函数体,上述代码中是赋值。
    AO {
         a : function a(){},
         b : undefined,
    }

执行的结果(在执行过程中相同属性的值会覆盖):

function a(){}
undefined
234 
123
function (){} 

以上,此为本人学习过程中的笔记,可能因为能力不足存在一些不足,还请大家多多包涵和给予建议,共同进步。如有问题,敬请私信。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值