//变量声明提升规则
var my_var = 'this is my value';
(function(){
   alert(my_var);//输出undefined
   var my_var = 'local value';
})()
javascript

解决方案 »

  1.   

    因为你下面定义了同名变量  javascript没有块级作用域 函数任何位置定义的变量可以在该函数的任意位置访问  只不过可能未赋值 所以是undefined  你下边定义的变量覆盖了全局的那个变量了
      

  2.   


    var my_var = "this is my value";
    (function(my_var){
       alert(my_var);//输出undefined
       var my_var = 'local value';
    })(my_var)试下这个
      

  3.   

    //变量声明提升规则
    var my_var = 'this is my value';
    (function(){
       alert(my_var);//输出undefined
       //var my_var = 'local value';
    })()真要实现让它不输出undefined有大把的方法,只是想知道它执行的原理而已。
      

  4.   


    var my_var = "this is my value";
    (function(my_var){
       var my_var;
       alert(my_var);//输出undefined
       my_var = 'local value';
    })()
    由此想到,由于变量声明提升规则,代码就如以上般执行。
      

  5.   

    这个就是js的闭包,外部声明的变量不能直接在闭包里使用,必须通过函数的参数将变量传进去,function(my_var1){
       alert(my_var1);//输出undefined
       var my_var = 'local value';
    })(my_var2)
    就相当于
    function(){
       var my_var1 = my_var2;
       alert(my_var1);//输出undefined
       var my_var = 'local value';
    })()
      

  6.   


    贵兄思维真乱,我这代码本意就不重在闭包;而且这段代码中的函数完全可以访问全局变量。请本地测试后再回答。
    因为你函数内的局部变量覆盖了全局变量,就如上所说全局变量变成局部变量,而在alert的时候该变量并未赋值,因此需要将外部变量传进匿名函数内