# 预编译作用域练习

1. 下面代码的执行结果是什么为什么
   ```
   console.log(x)
   x=5
   ```

2. 下面代码的执行结果是什么为什么
   ```
   console.log(x)
   var x=5
   ```
3. 下面代码的执行结果是什么 为什么
   ```
   var x = 5;
   console.log(x+""+y)
   var y=5
   
   ```

4. 下面代码的执行结果是什么 为什么
   ```
   "use strict";
    x = 3.14; 
   ```

5.  下面代码的执行结果是什么 为什么
   ```
   "use strict";
    myFunction();
   
    function myFunction() {
        y = 3.14;   // 报错 (y 未定义)
    }
   ```

6. 为什么要使用严格模式
7. 总结严格模式的限制
8. 下面代码的执行结果是什么  为什么
   ```
   var x = 0.1;
    var y = 0.2;
    var z = x + y 
    console.log(z==0.3)
   ```

9. js有几种类型的作用域 分别是啥
10. 下面代码的执行结果是什么 为什么
    ```
    
        function myFunction() {
            var carName = "porsche";
    
            console.log(carName)
    
        }
    
    ```
11. 下面代码的执行结果是什么 为什么
```

    function myFunction() {
        var carName = "porsche";
    }
     console.log(carName)
    
```

12. js运行三部曲是 

13. 任何变量如果未经声明就赋值  此变量是

14. 一切声明的全局变量 全是      的属性

15. 分析下面代码 的预编译执行过程

    ```
    var x = 1,
        y = z = 0;
    
    function add (n) {
      return n = n + 1;
    }
    
    y = add(x);
    function add (n) {
      return n = n + 3;
    }
    
    z = add(x)
    ```

    

16. 函数预编译的步骤

17. 全局预编译的步骤

18. 分析下面代码的预编译执行过程

    ```
    function fn(a){
        console.log(a);
        var a = 123;
        console.log(a);
        
        function a(){};
        console.log(a);
        
        var b = function(){};
        console.log(b);
        
        function d(){};
     }
     
     //调用函数
     fn(1);
    ```

    

18. 分析下面代码的预编译执行过程

    ```
    var a = 1;
    console.log(a);
    function test(a) {
      console.log(a);
      var a = 123;
      console.log(a);
      function a() {}
      console.log(a);
      var b = function() {}
      console.log(b);
      function d() {}
    }
    var c = function (){
    console.log("I at C function");
    }
    console.log(c);
    test(2);
    ```

    

19. 为什么会发生变量提升

20. 下面代码的执行结果是什么 为什么

    ```
    fun();
    console.log(b);
    var b = function fun(){  
        var a = 456;
        console.log(a);
    }
    
    ```

21.  下面代码的执行结果是什么 为什么

```
console.log(b);
var b = function fun(){  
    var a = 456;
    console.log(a);
}
fun();

```

22. 什么是执行期上下文

23. js中有哪几种执行期上下文  分别介绍

24. 分析下面代码的预编译执行过程

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

    

25. 分析下面代码 预编译执行过程

    ```
    function test() {
      console.log(b);
      if (a) {
        var b = 100;
      }
      c = 234;
      console.log(c);
    }
    var a;
    test();
    a = 10;
    console.log(c);
    
    作者：前端布吉岛
    链接：https://juejin.cn/post/6933756598678454280
    来源：掘金
    著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。
    ```

    