stairheaven
2013-05-21 23:18
浏览 281
已采纳

javascript 局部变量输出undefined?

请问下面的函数 a 输出什么? 为什么是这个值?
[code="java"]var i = 3;
function a(){
alert("i = " + i);
var i = 5;

}
a();[/code]

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • jinnianshilongnian 2013-05-22 07:37
    已采纳

    var i = 3;
    function a(){
    alert("i = " + i);
    var i = 5;

    }
    a();

    因为javascript的变量提前声明特性 即如上代码等价于

    var i = 3;
    function a(){
    var i;
    alert("i = " + i); //此时就是undefined了
    i = 5;

    }
    a();

    说白了 变量声明都会在函数开头完成 不管你怎么写的

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • smiky 2013-05-22 08:30

    js是有个预编译的过程的,请参考这个http://smiky.iteye.com/admin/blogs/1564549

    评论
    解决 无用
    打赏 举报
  • iteye_20073 2013-05-22 12:46

    这是因为javascript 内部变量和外部便量名字相同时,内部变量的级别高与外部变量的级别。再根据javascript的变量声明的hoisting机制,变量声明永远都会被提升至作用域的最顶端,所以alert 才会有一个undefined.

    评论
    解决 无用
    打赏 举报
  • silence_is_golden 2013-10-15 09:52

    undefined,说白了就是javascript解析器智障了,良好的编程习惯根本不会出现这种问题

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题