JavaScript基础-----预编译

1. JavaScript 的运行:

    JavaScript有一个特点,就是浏览器在执行JavaScript代码时会逐行执行,一行代码错误,其后面的代码块都不会被执行出来,那么,在脚本执行js引擎的时候,会产生三个步骤:

    (1)语法分析:检测代码有没有错误

    (2)预编译环节

    (3)根据编译好的进行逐行执行(最后才会进行逐行执行)

2. 预编译环节:

    (1)在预编译之前,页面产生并创建了GO(Global Object)全局对象,也就是window对象,只需分析变量声明和函数声明;

    (2)在函数运行前的一瞬间,会生成一个AO(Active Object)对象;

    (3)开始分析参数,形参作为 AO对象的属性名,实参作为AO对象的属性值;

    (4)接下来分析变量声明,变量名为属性名,变量值为undefined,如果遇到同名的情况,则不做任何改变;

    (5)再接着分析函数声明,函数名为属性名,值为函数体,如果遇到同名的情况,直接覆盖;

    注:函数执行一次,就会产生一次预编译的过程,预编译就是执行前的过程;

3.变量声明和函数声明:

var a = 123;     //变量声明
function self(){}     //函数声明

4.实例演示:

function test(){
    console.log(b); 
    if(a){
       var b = 100;  
    }
    console.log(b);  
    c = 234;   
    console.log(c);      
}
var a ;
test();
console.log(c); 

    开始分析:

//预编译过程:
//1.页面产生GO对象
//GO:{
   test : function  (形参为属性名,实参为属性值)
     a : undefined (变量名为属性名,变量值为undefined) 
     c : undefined (因为没有值,所有事undefined)
      }
//2.函数运行前的一瞬间,再产生一个AO对象,编译函数体内的内容
//AO:{
   b : undefined
   c : undefined
   test : function
     }
//预编译结束,开始逐行执行
//第一个b没有值,输出undefined
//第二个b虽然附了值,但是走不到if判断中,输出undefined
//第三个c赋予了值,输出234
//第四个c同样输出234,因为c = 234是没有声明的变量,是全局变量,归window对象所有

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值