函数中 变量的调用规范 赋值原则

发布于 2020-03-13  467 次阅读


在函数中调用变量

1.会先在 函数内部寻找这个变量

如果有,就调用函数内部定义的变量

2.如果函数内部没有定义这个变量,再去全局作用域,找是否有这个变量

如果有,就调用全局的作用域变量

3.如果全局和局部都有,调用局部作用域变量

必须要注意: 如果本身没有定义变量,只会找全局作用域中的变量
不会找 自己内部嵌套的 函数中的变量
        // // 变量的调用原则
        var int1 = 500;
        function  fun1() {
            var int1 = 100;
            function fun2() {
                // fun2中的局部作用域变量int1
                // 只能在 fun2 中使用 fun2外部是不能调用的
                // fun1中 操作执行 int1 永远不会是 定义在 fun2中的int1
                var int1 = 1000;
            }
            return int1;
        }
        console.log( fun1() );  //100

函数中,变量的赋值原则

1.函数中,自己有这个变量

就赋值操作自己的局部作用域变量

        var int1 = 100;
        function fun3() {
            // 如果 函数中 有这个变量,就会操作函数中,局部作用域的这个变量
            // 不会 操作 全局作用域变量
            var int1 = 200;
            int1 = '北京你好';  
            console.log( int1 );  // 北京你好       
        }
        fun3();
        console.log( int1 );  // 100

2.如果自己没有,就去全局作用域中找这个变量

如果有,就赋值操作这个变量
        var int1 = 100;
        function fun3() {
            // 函数中本身没有int1,去全局作用域,找int1
            // 有的话,就操作这个int1
            int1 = '北京你好';            
        }
        fun3();
        console.log( int1 );  //北京你好

3.如果所有的作用域都是没有这个变量

赋值语句,升级为,定义变量的语句
定义一个 全局作用域变量 并且赋值
        function fun3() {
            // 如果所有的作用域中,都没有这个变量int1
            // 这个 赋值语句 会变化升级为 定义变量语句
            // 会定义一个全局作用域变量 并且赋值
            int1 = '北京你好';            
        }
        fun3();
        console.log( int1 );  //北京你好

进阶案例

        var str1 = '上海';
        console.log( str1 );  //上海
        fun4();  
        console.log( str1 );  //张家口
        function fun4(){
            str1 = '张家口';
            console.log( str1 );  //张家口
            fun5();
            console.log( str1 );  //张家口
        }
        function fun5(){
            var str1 = '北京';
            console.log( str1 );  //北京
        }

一沙一世界,一花一天堂。君掌盛无边,刹那成永恒。