预编译(题目)

1.函数声明整体提升
2.变量 声明提升
3.一切声明的全局变量,全是window的属性

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

1

function fn(a){
    console.log(a);//function a(){}
    var a=123;
    console.log(a);//123
    function a(){}
    console.log(a)//123
    var b = function(){}
    console.log(b);//function(){}
    function d(){}
}
fn(1)

2

function test(a,b){
    console.log(a); //1
    c=0;
    var c;
    a=3;
    b=2;
    console.log(b)//2
    function b(){}
    function d(){}
    console.log(b)//2
    
}
    
test(1)

3

function test(a,b){
    console.log(a);//ƒ a(){}
    console.log(b);//undefined
    var b=234;
    console.log(b);//234
    a=123;
    console.log(a);//123
    function a(){}
    var a;
    b=234;
    var b=function(){}
    console.log(a);//123
    console.log(b);//ƒ (){}
}

test(1)

4

console.log(test) //function test(test){
function test(test){
    console.log(test) //function test(){}
    var test = 234;
    console.log(test)//234
    function test(){}
}
test(1);
var test = 123

5

var global = 100;

function fn(){
    console.log(global) //100
}
fn()

globel = 100;
function fn(){
    console.log(globel)//undefiend
    globel = 200;
    console.log(globel)//200
    var globel = 300;
}
fn();
var global;

6

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

var a;
test();
a=10;
console.log(c)//234

7

function bar(){
    return foo;
    foo = 10;
    function foo(){}
    var foo = 11;
}
            
console.log(bar())      //function foo(){}  

8

  var b = "boy";
   console.log(b); // boy
   function fighting(){
    
    console.log(a); //undefiend
    console.log(c);  //undefiend
    if(a === "apple"){
     a = "Alice"
    }else{
     a = "Ada"
    }
    console.log(a)  //Ada
    var a = "Andy"; 
    middle();
    function middle(){
     console.log(c++); //NaN
     var c = 100;
     console.log(++c); //101
     small();
     function small(){
      console.log(a)  //Andy
     }
    }
    var c = a = 88;
    function bottom(){
     
     console.log(this.b); //boy
     b = "baby";
     console.log(b) //baby
    }
    bottom();
    
   }
   fighting();
   console.log(b)//baby
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 文章目录 JavaScript运行三部曲 JavaScript预编译 01 关于预编译的一些知识点 02 预编译四...
    寒羽鹿阅读 485评论 1 0
  • 预编译是js的一个特色,也算是闭包之前最难的一个知识点。 预编译有4句公式,而这4句公式只要背熟就能理解预编译。 ...
    德育处主任阅读 1,480评论 0 7
  • 大家要明白,这个预编译和传统的编译是不一样的(可以理解js预编译为特殊的编译过程)JavaScript是解释型语言...
    pengtoxen阅读 310评论 0 0
  • JS 运行三部曲 JS 运行三部曲语法分析预编译解析执行 预编译前奏暗示全局变量 imply global全局变量...
    席坤阅读 381评论 0 0
  • 渐变的面目拼图要我怎么拼? 我是疲乏了还是投降了? 不是不允许自己坠落, 我没有滴水不进的保护膜。 就是害怕变得面...
    闷热当乘凉阅读 4,351评论 0 13