javascript 预编译

javascript 执行过程

我们着重说下预编译

预编译有全局预编译和函数预编译

函数预编译发生在函数执行的前一刻

预编译不受if等逻辑判断的影响,正常按照规则执行预编译

预编译

一切申明的全局变量,全是window的属性

 1         //任何申明的全局变量,归window所有  全是window的属性
 2         var a = 123;
 3         //预编译赋值给Window对象
 4         //  window{
 5         //      a:123
 6         //  }
 7         //window.a和a之间有了引用联系
 8         a = 10;
 9         window.a = 10;
10         console.log(a)//window.a

如果变量未经申明就赋值,此变量为window的属性

1         function test(){
2             //从右向左赋值  这样的  b未经赋值  b归window所有
3             var a = b = 123;
4         }
5         test();
6         console.log(window.b);

预编译过程

1、创建AO对象(执行期上下文)
2、找形参和变量申明,将变量和形参名作为AO属性名,值为Undefined
3、将实参值和形参统一
4、在函数体里面找函数申明,值赋予函数体
 
 1         //1、创建AO对象
 2         //2、找形参和变量申明,作为AO属性名赋值undefined
 3         //AO{
 4         //    foo:undefined
 5         //}
 6         //3、实参和形参统一
 7         //4、找函数申明体,值赋予函数体
 8         //AO{
 9         //    foo:function foo(){}
10         //}
11         //输出应该是函数体
12         function bar(){
13             return foo;
14             foo=10;
15             function foo(){}
16             var foo=11;
17         }
18         console.log(bar());
 

猜你喜欢

转载自www.cnblogs.com/FashionDoo/p/10298355.html