• JavaScript作用域和作用域链练习题


    练习1.

        <script>
            function fun(num){
                console.log(num);
                var num = 5;
                console.log(num);
            }
            fun(10)
            //分析一波
            // 1.分析全局变量GO,生成go对象
            // GO={
            //     全局变量声明:
            //         没有略过
            //     全局函数声明:
            //     fun:function;
            // }
            // 2.逐行执行
            // 3.分析AO,生成AO对象
            // AO={
            //     1.分析参数
            //         num:10
            //     2.分析变量声明:
            //         num:undefind  然后赋值为5
            //     3.分析函数声明
            //         没有略过    
            // }
            // 最后输出:
            // 第十行输出是10   输出的是参数 num
            // 12行输出为5  输出的是变量num
            </script>

    2.

        <script>
            function fun(ger){
                console.log(ger);
                function ger(){
                    alert("hello world");
                }
            }
            fun(5)
            //分析一波
            // 1.分析全局变量GO,生成go对象
            // GO={
            //     全局变量声明:
            //         没有略过
            //     全局函数声明:
            //     fun:function;
            // }
            // 2.逐行执行
            // 3.分析AO,生成AO对象
            // AO={
            //     1.分析参数
            //         ger:5
            //     2.分析变量声明:
            //         没有略过
            //     3.分析函数声明
            //         ger:function;    
            //     重复名称覆盖
            // }
            // 最后输出:function ger(){
                //     alert("hello world");
                // }
        </script>

    3.

        <script>
            function fun(ger){
                console.log(ger);
                var ger = function(){//函数表达式
                    alert("hello world");
                }
            }
            fun(5)
            //分析一波
            // 1.分析全局变量GO,生成go对象
            // GO={
            //     全局变量声明:
            //         没有略过
            //     全局函数声明:
            //     fun:function;
            // }
            // 2.逐行执行
            // 3.分析AO,生成AO对象
            // AO={
            //     1.分析参数
            //         ger:5
            //     2.分析变量声明:
            //         没有略过
            //     3.分析函数声明
            //         没有略过
            //     重复名称覆盖
            // }
            // 最后输出:5
        </script>

    4.

        <script>
            function a(b){
                console.log(b);
                function b(){
                    console.log(b);
                }
                b();
            }
            a(1)
            //分析一波
            // 1.分析全局变量GO,生成go对象
            // GO={
            //     全局变量声明:
            //         没有略过
            //     全局函数声明:
            //     a:function;
            // }
            // 2.逐行执行
            // 3.分析AO,生成AO对象
            // AO={
            //     1.分析参数
            //         b:1
            //     2.分析变量声明:
            //         没有略过
            //     3.分析函数声明
            //         b:function;    
            //     重复名称覆盖
            // }
            // 最后输出:第十行的时候 输出的是function b的表达式  因为函数声明
            // 在十四行调用函数 function b的时候
            // 第十二行的时候也是函数function b 的表达式
        </script>

    5.

        <script>
            function a(b){
                console.log(b);
                var b = function(){//函数表达式
                    console.log(b);
                }
                b();
            }
            a(1)
            //分析一波
            // 1.分析全局变量GO,生成go对象
            // GO={
            //     全局变量声明:
            //         没有略过
            //     全局函数声明:
            //     fun:function;
            // }
            // 2.逐行执行
            // 3.分析AO,生成AO对象
            // AO={
            //     1.分析参数
            //         b:1
            //     2.分析变量声明:
            //         没有略过
            //     3.分析函数声明
            //         没有略过    
            //     重复名称覆盖
            // }
            // 最后输出: 1  function b的函数
        </script>

    7.

        <script>
            // 第一题
            function test(a,b){
                console.log(a);
                console.log(b);
                var b = 234;
                console.log(b);
                a = 123;
                console.log(a);
                function a(){};
                var a ;
                b = 234;
                var b = function(){};
                console.log(a);
                console.log(b);
            }
            test(1);
            //分析一波
            // 1.分析全局变量GO,生成go对象
            // GO={
            //     全局变量声明:
            //         没有略过
            //     全局函数声明:
            //     test:function
            // }
            // 2.逐行执行
            // 3.分析AO,生成AO对象
            // AO={
            //     1.分析参数
            //         a:1
            //     2.分析变量声明:
            //         a:undefind
            //         b:234
            //     3.分析函数声明
            //         没有 忽略
            //     重复名称覆盖
            // }
            // AO={
            //        a:function
            //        b:234
            // }
            // 最后输出:11行:函数a         function a在17行提前声明
            //             12行:undefined       b声明提前   赋值在13行
            //             14行:234;              输出13行赋值过后的b
            //             16:123               在15行赋值a为123  在十六行输出    
            //             21:123                 赋值过后的a
            //             22:function         在二十行b定义为函数表达式
            //             
            //
        </script>

    8.

        <script>
            console.log(test);
            function test(test){
                console.log(test);
                var test = 234;
                console.log(test);
                function test(){}
            }
            test(1);
            var test = 123;
    
            //分析一波
            // 1.分析全局变量GO,生成go对象
            // GO={
            //     全局变量声明:
            //         test:123;
            //     全局函数声明:
            //     test:function
            // }
            // 2.逐行执行
            // 3.分析AO,生成AO对象
            // AO={
            //     1.分析参数
            //         test:1
            //     2.分析变量声明:
            //         test:234
            //     3.分析函数声明
            //         test:funtion
            //     重复名称覆盖
            // }
            // AO={
            //        test:funtion
            // }
            // 最后输出:9行:undefined         全局变量提前声明 但是赋值在17行  错误
            //                 9行 输出的是 function test  先声明的是变量后声明的是函数,函数把变量覆盖了
            //              11行:function test
            //              13  234                   逐行运行后 在12行的时候test被赋值为234     
            </script>

    9.

        <script>
            // 第三题
            function test(){
                console.log(b);
                if(a){
                    var b = 100;
                }
                c = 234;
                console.log(c);
            }
            var a;
            test();
            a = 10;
            test();
            console.log(c);
    
    
            //分析一波
            // 1.分析全局变量GO,生成go对象
            // GO={
            //     全局变量声明:
            //         a : 123
            //     全局函数声明:
            //     test:function
            // }
            // 2.逐行执行
            // 3.分析AO,生成AO对象
            // AO={
            //     1.分析参数
            //         没有忽略
            //     2.分析变量声明:
            //         b:100
            //     3.分析函数声明
            //         没有 忽略
            //     重复名称覆盖
            // }
            // AO={
            //        b:100
            //        c =234
            // }
            // 最后的输出结果:
            //         逐行运行: 在19行调用函数 function test  在第11行 输出 undefined  因为b在13行才声明
            //         16  234 
            //         在21行第二次调用函数 a为非空  b =100 但是先输出b 然后赋值  如果输出是实在if下面就是100 
            //         16  234
            //         22  234
        </script>

    10.

        <script>
            // 第四题
            function bar(){
                return foo;
                foo = 10;
                function foo(){};
                var foo = 11;
            }
            console.log(bar());
    
            //分析一波
            // 1.分析全局变量GO,生成go对象
            // GO={
            //     全局变量声明:
            //         没有忽略
            //     全局函数声明:
            //         bar:function
            // }
            // 2.逐行执行
            // 3.分析AO,生成AO对象
            // AO={
            //     1.分析参数
            //         没有忽略
            //     2.分析变量声明:
            //         foo :11
            //     3.分析函数声明
            //         foo:function
            //     重复名称覆盖
            // }
            // AO={
            //        foo:funtion
            // }
            // 最后输出结果:
            //         在16行调用函数
            //         11行 返回值为 function
            //         在14行声明变量 foo并且赋值为11  是在函数 foo里面的 
        </script>

    11.

        <script>
                // 第五题
            console.log(bar());
            function bar(){
                foo = 10;
                function foo(){}
                var foo = 11;
                return foo;
            }
        //分析一波
            // 1.分析全局变量GO,生成go对象
            // GO={
            //     全局变量声明:
            //         没有忽略
            //     全局函数声明:
            //         bar:function
            // }
            // 2.逐行执行
            // 3.分析AO,生成AO对象
            // AO={
            //     1.分析参数
            //         没有忽略
            //     2.分析变量声明:
            //         foo :11
            //     3.分析函数声明
            //         foo:function
            //     重复名称覆盖
            // }
            // AO={
            //        foo:funtion
            // }
            // 最后输出结果:
            //         在10行调用函数
            //         声明函数为 foo:function
            //         12 foo被赋值为为10
            //         14行 声明变量并且赋值为11
            //         在14行声明变量 foo并且赋值为11  是在函数 foo里面的
            //         15行 返回值为 11
        </script>
  • 相关阅读:
    设置zookeeper开机自启动
    安装zookeeper
    Elasticsearch 5.6.5 安装head插件
    [redis] Node is not empty. Either the node already knows other nodes
    【redis】 redis 创建集群时,Waiting for the cluster to join.... 一直等待
    [redis] redis.clients.jedis.exceptions.JedisDataException: MOVED 13102 127.0.0.1
    [linux] FastDFS访问文件,400 Bad Request
    [linux] Nginx编译安装错误error: the HTTP rewrite module requires the PCRE library
    [java] java解析txt文件
    【java】 java 解压tar.gz读取内容
  • 原文地址:https://www.cnblogs.com/wangzheng98/p/11009853.html
Copyright © 2020-2023  润新知