javascript - 如果在上层作用域中声明了变量,则在局部作用域中 undefined variable ,并且在未执行的语句中在局部作用域中声明了具有相同名称的 var

标签 javascript

function a(){
    var h = 1;
    function b(){
        alert(h);
    }
    b();
}
a();

提醒 1

function a(){
    var h = 1;
    function b(){
        if(false){
            var h = h * 2;
        }
        alert(h);
    }
    b();
}
a();

警报未定义。为什么?

最佳答案

变量声明被移动到它们定义的范围的顶部并且不分配值,直到执行赋值行。所以,你的第二段代码可以理解为

function a() {
    var h = 1;

    function b() {
        var h;
        if (false) {
            h = h * 2;
        }
        alert(h);
    }
    b();
}
a();

即使您在 if 子句中定义了 h,由于 JavaScript 没有 block 作用域,变量声明实际上被移到了函数的顶部。由于 if 条件不满足,因此永远不会为 h 赋值。这就是它提醒 undefined

的原因

关于javascript - 如果在上层作用域中声明了变量,则在局部作用域中 undefined variable ,并且在未执行的语句中在局部作用域中声明了具有相同名称的 var,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24828743/

相关文章:

javascript - 如何从函数显示 JSX 组件并显示在屏幕上

javascript - Cloudant 上的 PouchDB

javascript - 如何制作 Google 混搭,允许多个用户在 map 上精确定位多个位置?

javascript - 状态改变时在 React JS 中实现过渡效果

javascript - VSCode 如果在省略大括号时缩进

javascript - 我应该在index.html 中包含所有 Controller 的所有脚本标签吗?

javascript - xmlhttprequest欺骗referer然后重定向到另一个页面?

javascript - ReactJS 重用模态来添加和编辑

javascript - 如何将 $(this) 应用于单个子元素

javascript - 如何在不使用 ajax、jquery、javascript 重新加载整个页面的情况下更新我的动态 Web 内容