javascript - 局部变量影响全局变量 - Javascript 变量作用域

标签 javascript

Possible Duplicate:
variable hoisting

    var a = "global";

    //version 1
    function changeGlobal(){
        alert(a); //why is 'a' undefined here?
        if(a){ 
        var a = "local";
        alert(a);
        }
    }
    //version 2
    function changeGlobal(){
        alert(a); //why is 'a' 'global' here? what diff does 'var a="local"' make?
        if(a){ 
        //var a = "local";
        alert(a);
        }
    }
    changeGlobal();

问题是内联的。帮助我理解变量作用域。

最佳答案

在 JavaScript 中,变量声明被“提升”到函数的顶部,与声明它们的位置无关。

因此,在changeGlobal的第一个变体中,当您声明var a = "local"时,a变量声明被提升到顶部。变量的赋值也不会被提升,因此当您警告 a 时,它是一个未赋值的变量,因此未定义。

也就是说,

function changeGlobal(){
    alert(a); //why is 'a' undefined here?
    if(a){ 
    var a = "local";
    alert(a);
    }
}

相当于

function changeGlobal(){
    var a;    // hoisted here (not assigned a value yet)
    alert(a); //why is 'a' undefined here?
    if(a){ 
    a = "local"; // only assigned a value here
    alert(a);
    }
}

关于javascript - 局部变量影响全局变量 - Javascript 变量作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13427311/

相关文章:

php - 表单验证-安全

javascript - 如何让用户通过复制/粘贴上传文件?

javascript - 使用 date-fns 获取两个范围内的重叠月份

JavaScript:特定时区的日期对象错误

java - 动态添加 UI 组件

javascript - 获取 DOM 元素的 dojo 方法

javascript - 无论如何要在 IE 8 开发人员工具中查看与页面关联的 .js 列表?

javascript - 为什么上个月的 12.31.2013 是 12.01.2013?

javascript - 如何制作这个 Gauge 微分 Angular ?

javascript - EmberJS - 如何部分嵌套父路由和子路由?