全局变量 变undefined,JS定义先后顺序谁帮忙理一下?

var a = 3;
function box(){
    console.log(a);
    var a = 5;
}
box();

输出:undefined 3
这个很不理解。。。。

阅读 7.4k
3 个回答
`function box(){
    console.log(a);
    var a = 5;
}`

其实就是

   `function box(){
        var a; //这边就覆盖了 全局中 定义的var a
        console.log(a);
        a = 5;
    }`

其实就是个 Hoisting

Javascript在执行前会对整个脚本文件的声明部分做完整分析(包括局部变量),从而确定实变量的作用域
function里面的var a执行前就有了,但是没赋值,所以就undefined了

var a = 3;
function box(){
    console.log(window.a);
     var a = 5;
}

这样就能调到全局的了

var a = 3;
function box(){

var a;
console.log(a);
a = 5;

}
box();
JavaScript中的变量提升(Hoisting)。在JS中,就是把定义在后面的东东(变量或函数)提升到前面中定义。 要是还不明白的话你百度一下“变量提升”会对你有帮助。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题