日期:2014-05-16  浏览次数:20318 次

以下代码为什么会输出“undefined”?

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

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

这个就是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';
})()


贵兄思维真乱,我这代码本意就不重在闭包;而且这段代码中的函数完全可以访问全局变量。

请本地测试后再回答。

因为你函数内的局部变量覆盖了全局变量,就如上所说全局变量变成局部变量,而在alert的时候该变量并未赋值,因此需要将外部变量传进匿名函数内