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

xiaozhiqiang15 2013-09-23 01:34:41

//变量声明提升规则
var my_var = 'this is my value';
(function(){
alert(my_var);//输出undefined
var my_var = 'local value';
})()
...全文
226 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lynnlovemin 2013-09-23
  • 打赏
  • 举报
回复
引用 6 楼 xiaozhiqiang15 的回复:
[quote=引用 5 楼 lynnlovemin 的回复:] 这个就是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'; })()
贵兄思维真乱,我这代码本意就不重在闭包;而且这段代码中的函数完全可以访问全局变量。 请本地测试后再回答。[/quote] 因为你函数内的局部变量覆盖了全局变量,就如上所说全局变量变成局部变量,而在alert的时候该变量并未赋值,因此需要将外部变量传进匿名函数内
xiaozhiqiang15 2013-09-23
  • 打赏
  • 举报
回复
引用 5 楼 lynnlovemin 的回复:
这个就是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'; })()
贵兄思维真乱,我这代码本意就不重在闭包;而且这段代码中的函数完全可以访问全局变量。 请本地测试后再回答。
lynnlovemin 2013-09-23
  • 打赏
  • 举报
回复
这个就是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'; })()
xiaozhiqiang15 2013-09-23
  • 打赏
  • 举报
回复
引用 1 楼 zzgzzg00 的回复:
因为你下面定义了同名变量 javascript没有块级作用域 函数任何位置定义的变量可以在该函数的任意位置访问 只不过可能未赋值 所以是undefined 你下边定义的变量覆盖了全局的那个变量了


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

由此想到,由于变量声明提升规则,代码就如以上般执行。
xiaozhiqiang15 2013-09-23
  • 打赏
  • 举报
回复
引用 2 楼 lynnlovemin 的回复:

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


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

var my_var = "this is my value";
(function(my_var){
   alert(my_var);//输出undefined
   var my_var = 'local value';
})(my_var)
试下这个
似梦飞花 2013-09-23
  • 打赏
  • 举报
回复
因为你下面定义了同名变量 javascript没有块级作用域 函数任何位置定义的变量可以在该函数的任意位置访问 只不过可能未赋值 所以是undefined 你下边定义的变量覆盖了全局的那个变量了

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧