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);
        }

解决方案 »

  1.   

    为什么在call back 里是 undefined 呢 ? 
      

  2.   

    javascript么有块级作用域 
    你在函数里任意位置定义的变量都可以在该函数的任意位置访问
    所以你在callback定义a时就已经覆盖掉了外面的a  只是你alert时还没给a赋值  所以是undefined
      

  3.   


       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);
            }