JavaScript是怎么解析的

 // js 是怎么被浏览器解析的?
    // js 是被运行平台:浏览器 和 node
    /**
     * 1:全局检索。查看是否有语法错误--->语言分析
     * 2:创建全局对象GO(global)--->预编译
     * 3:执行每行代码 对变量进行赋值 等操作 --->解析执行 ---> 变量一旦创建;不能删除,除非关闭程序
     * ---> window对象在打开页面时候创建;先创建window在语言分析
     * **/
    // 预编译的过程:作用域与对象关系,对象中内容具体变化的过程
    /**
     * 全局作用域下预编译的过程
     * 1:当语言分析执行完毕时,
     * 第一步:创建一个go的空对象 --->go{}
     * 第二步:将全局下所有var声明的变量提升到作用域的最顶端,同时给GO对象添加属性(属性为var声明的变量) 值为undefined
     * ---->go{a:un,b:un,} 没c  d 
     * 注意:let 与 const 都不能提升
     * 第三步:函数定义提升,会将定义的函数提升到当前作用域的最顶端 ----->go{a:un,b:un,f:function f(){}}
     * 注意:1:变量与函数的提升没有最顶端;只有提升的先后顺序,变量先提升;函数后提升
     *      2:变量提升,声明提升赋值不提升,赋值为undefined
     *      3:函数提升,函数名为属性,值为函数在堆中的指针。
     *      4:当变量名字和函数名字重复时候,访问该名字;值为函数;--->理由是:因为变量先提升值为undefined,函数名后提升;将udnefined 变为函数
     *      
     * 解析执行
     * 1:对所有声明的变量以及函数;进行使用值;重新赋值等操作
     * 2:在执行中如果有变量 = 赋值 或直接将该变量添加到GO中;并直接赋值,没有udnefined 过程
     * 
     * **/

     console.log(b) // undefined
     //  console.log(c)  //报错
     //  console.log(d)  // 报错
     var a;
     a = 10;
     var b = 0;
    //  let const 不能提升
     let c = 0;
     const d = 0;
     function f(){
         var a = 0;
     }
    

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值