• js 函数作用域


    像c c++ c#的作用域是语句块,以{}大括号来区分的,而python和js是以函数来区分作用域的。

    如:

    ================================ 1. 以函数作为作用域 (let除外)================================

            其他语言: 以代码块作为作用域
                        public void Func(){
                            if(1==1){
                                string name = 'Java';
                                
                            }
                            console.writeline(name);
                            
                        }
                        Func()
                        // 报错
                        
            Python:   以函数作为作用域
                        情况一:
                            def func():
                                if 1==1:
                                    name = 'alex'
                                print(name)
                                
                            func()
                            // 成功
                        情况二:
                            def func():
                                if 1==1:
                                    name = 'alex'
                                print(name)
                                
                            func()
                            print(name)
                            // 报错
                    
            JavaScript:  以函数作为作用域
            
                        function func(){
                            if(1==1){
                                var name = 'alex';
                            }
                            console.log(name);
                        }
                        func()
    

      


    ================================ 2. 函数的作用域在函数未被调用之前,已经创建,即申明定义函数时创建作用范围 ================================

            function func(){
                if(1==1){
                    var name = 'alex';
                }
                console.log(name);
            }
    

      

    ================= 3. 函数的作用域存在作用域链,并且也是在被调用之前创建。即嵌套函数中,越内层函数的变量越优先,依次向外层找,全局也找不到就报错 ==================

            示例一:
                xo = "alex";
                
                function func(){
                    // var xo = 'eric';
                    function inner(){
                        // var xo = 'tony';
                        console.log(xo);
                    }
                    
                    inner()
                }
                
                func()
            
            示例二:
                xo = "alex";
                
                function func(){
                    var xo = 'eric';
                    function inner(){
                        
                        console.log(xo);
                    }
                    
                    return inner;
                }
                
                var ret = func()
                ret()
            
            
            
            示例三:
                xo = "alex";
                
                function func(){
                    var xo = 'eric';
                    function inner(){
                        
                        console.log(xo);
                    }
                    var xo = 'tony';
                    
                    return inner;
                }
                
                var ret = func()
                ret()
    

      

    ================= 4. 函数内局部变量 声明提前,但不赋值 ==================

    function func(){
                console.log(xxoo);
            }
            
            func();
            // 程序直接报错
            
            function func(){
                console.log(xxoo);
                var xxoo = 'alex';
            }
            函数从上到下解释时,遇到函数定义,会先把里面所有局部变量先定义一下,但不赋值。
            
            func();
            // undefined
    

      

  • 相关阅读:
    九、运行时内存篇——方法区
    十三、垃圾回收篇——垃圾回收器
    八、运行时内存篇——堆
    十四、JVM性能调优案例——OOM
    一、设计模式一句话总结
    十、对象的内存布局篇
    十一、执行引擎篇
    七、运行时内存篇——虚拟机栈
    工厂方法模式
    外观模式
  • 原文地址:https://www.cnblogs.com/alex-hrg/p/9446282.html
Copyright © 2020-2023  润新知