全局及局部变量,预编译

全局变量:在全局定义的变量
局部变量:在局部定义的变量,也称函数里面定义的变量
函数里面的能访问外面的 外面的不能访问里面的

  var  a  = 123;
 //全局变量
function  test  () {
    var  b  =  123;
     function  demo () {
           var  c =  234 ;
           document.write(b);
           document,write(a);
 }
  demo();
  document.write(c);
}
test();
c不能访问   b a 可以访问

预编译前奏

1.imply global 暗示全局变量:即任何变量,如果变量未经声明就赋值,此变量就为全局对象所有。
eg:a=123;
eg: var a = b = 123;
2.一切声明的全局变量,全是window的属性。
eg:var a = 123; ===> window.a=123

预编译

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

     function    test()  {
        var  a  =  b  =  123; 
     }
    test();
      b  未被声明  直接被赋值 归window所有
     window.b  =  123   window.a  =  underfined

var num = 123; window.num = 123; delete window.name -> false 一旦经历了var的操作,所得出的属性,window,这种属性叫做不可配置属性 不可配置的属性 delete不掉
var obj = {}; obj.num = 234;

四部曲

1.创建AO对象
2.找形参和变量声明,将变量和形参名作为AO属性名,值为underfined
3 将实参值和形参统一
4 在函数体里面找函数声明,值赋予函数体

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

1.生成了一个GO对象  
GO{
       a  : 123(underfined=>function~~=>123)
 }
var  a  =  123;
function  a  (){

}
console.log(a);=>123
Go{
    ƒ test(test)  {
    console.log(test);  
    var  test  =  234;
    console.log(test);
    function  test(){
    }
    }
 }


 console.log(test);
function  test(test)  {
    console.log(test);  AO里有先找AO  没有再去找GO
    var  test  =  234;
    console.log(test);
    function  test(){
    }
  AO{
      test  :  function  ()  {},=>234
  }
}
test(1);
var  test  =  123;

你可能感兴趣的:(全局及局部变量,预编译)