JavaScript 中全局作用与函数作用域的特点,及JS预编译

170 阅读1分钟

1.全局作用域 全局作用于在页面被创建时产生,在页面被销毁时随之消失。 全局作用域默认的始祖对象是window 全局作用域下读取不到函数作用域内的变量

2.局部作用域 局部作用域在函数执行时产生,函数执行完毕后,函数作用域也随之消失 局部作用域可以读取到全局作用域的变量

3.预编译

在函数被创建时,js会产生一个预编译的对象AO{},AO对象里就承载着函数作用域内部的所有形成过程

在页面被创建时,在全局作用域产生的前期,JS会产生一个全局的预编译对象GO{},GO对象里同样承载着全局作用域形成的过程

以函数作用域为案例讲述一道预编译的面试题

预编译形成过程:

1.创建AO对象 2.将形参和声明变量定义为对象中的属性,并且默认将它们的key设置为undefined 3.再将实参传入和函数定义并赋值给属性 4.函数声明赋值给属性

      console.log(a) //function a(){}
      function a(){}
      console.log(a) //function a(){}
      console.log(c) // 2
      if(false){
        var b = 111
      }
      var b = function(){}
      console.log(b) //function(){}
      console.log(d) //funciton d(){}
      function d(){}
    }
    Demo(1,2)
    /*
    OA = {
      a:undefined 1 funciton a(){} 
      b:undefined function(){}
      c:undefined 2 function c(){} 
      d:undefined funciton d(){}
    } 
     */