js 小提问解决办法

js 小提问function fn_1() {var c 3alert(c) // 3var c ttc //在这里给了实例 c 上面还是可以

js 小提问

   function fn_1() {
            var c = "3";
            alert(c); // 3
            var c = "ttc"; //在这里给了实例 c 上面还是可以获取到值
         
            var call_back = function(a) {
                alert(a);
                alert(c); //undefined
                var c = "ttc"; // //在这里给了实例 c 上面就获取不到值了是为什么呢
            }
            fn_2(call_back);
        }
        function fn_2(call_back) {
            var a = "ttc";
            call_back(a);
        }


[解决办法]
javascript么有块级作用域 
你在函数里任意位置定义的变量都可以在该函数的任意位置访问
所以你在callback定义a时就已经覆盖掉了外面的a  只是你alert时还没给a赋值  所以是undefined
[解决办法]
引用:
为什么在call back 里是 undefined 呢 ? 


   function fn_1() {
            var c = "3";
            alert(c); // 3
            var c = "ttc"; //在这里给了实例 c 上面还是可以获取到值
          


            var call_back = function(a) {
                alert(a);
                alert(c); //这一行在执行时会现在函数内部找有没有变量c(如果有则弹出这个c,没有就在外部函数fn_1中找到,同理找到就弹出c,找不到则继续向外层也就是全局找c...),很显然函数内是有c的,但是c是在该行之后被赋值的,所以弹出时会弹出js声明一个变量时变量默认得到的值“undefined”。
                var c = "ttc"; // <span style="color: #FF0000;">//在这里给了实例 c 上面就获取不到值了是为什么呢</span>
            }
            fn_2(call_back);
        }
        function fn_2(call_back) {
            var a = "ttc";
            call_back(a);
        }