zoukankan      html  css  js  c++  java
  • javascript中的变量作用域

    <script>
            // javascript变量的作用域
            // 声明环境: 块中、函数中、全局
            // 声明方式: 1)使用var 2)不使用var
            
            // 块中
            if (true){
                var block_var_a = "test";
                block_a = "test";
            }
            console.log("block_var_a="+block_var_a);    // block_var_a=test
            console.log("block_a="+block_a);    // block_a=test
    
            // 函数中
            var fun1 = function () {
                var fun_var_a = "test";
                fun_a = "test";
            }
            fun1();
            //console.log("fun_var_a="+fun_var_a);    // Uncaught ReferenceError: fun_var_a is not defined
            console.log("fun_a="+fun_a);    // fun_a=test
    
            // 全局
            var global_var_a = "test";
            global_a = "test";
            if (true){
                console.log("global_var_a="+global_var_a);  // global_var_a=test
                console.log("global_a="+global_a);  // global_a=test
            }
        </script>
    
        <!-- 另一script标签中 -->
        <script>
            console.log("-----------------------------");
    
            console.log("block_var_a="+block_var_a);    // block_var_a=test
            console.log("block_a="+block_a);    // block_a=test
            console.log("fun_a="+fun_a);    // fun_a=test
            console.log("global_var_a="+global_var_a);  // global_var_a=test
            console.log("global_a="+global_a);     // global_a=test
        </script>
    

      结论:

        1)不使用var声明的变量不管是在哪声明的,其作用域都是全局的

        2)javascript中不存在块级作用域

        3)只有在函数中使用var声明的变量其作用域是局部的, 其它都是全局的

    为什么不存在块级作用域?请看下面:

      ①:

    if(false){
      var value = 1;      
    }
    console.log(value);    // undifined
    

      ②:

    console.log(value);    // 报错
    

      在处理第①种情况时,会转变成:

    var vaule;
    if(false){
      value = 1;  
    }
    // ...
    

      所以打印vaule的值是undifined,而不是报错

  • 相关阅读:
    Java中String、StringBuffer和StringBuilder的区别
    Map集合学习
    Set集合学习
    List集合学习
    常用集合类简介及线程安全和非线程安全的集合对象
    JQuery入门
    原生Ajax使用
    JavaScript闭包
    Demo:servlet实现图片的上传
    Android Handler 内存泄漏问题
  • 原文地址:https://www.cnblogs.com/daemon-/p/8940904.html
Copyright © 2011-2022 走看看