Javascript-变量提升

标签 javascript

这是一个简单的片段,我只是不明白。

下面的代码输出 12,我明白了,因为 var foo = 12; 替换了之前的变量声明。

<script>
var foo = 1;
function bar(){
  if (!foo) {
    var foo = 12;
  }
  alert(foo);
}
bar();
</script>

在下面的代码中,它警告 1 ,这意味着在函数外部声明的变量在函数内部是可以访问的。

  <script>
    var foo = 1;
    function bar(){
      alert(foo);
    }
    bar();
    </script>

但是,在下面的代码中,为什么会提示 undefined ?我想,它会提醒 1,我只是将之前声明的变量分配给新变量。

  <script>
    var foo = 1;
    function bar(){
      if (!foo) {
        var foo = foo;
      }
      alert(foo);
    }
    bar();
    </script>

最佳答案

变量声明被推到函数的开头。

因此实际上发生了以下情况:

function bar(){
      var foo;
      if (!foo) {
        foo = foo;
      }
      alert(foo);
}

因此您需要将其更改为使用 window.foo 以便您指的是全局属性而不是函数的属性:

var foo = 1;
function bar(){
   var foo;
   if (!window.foo) {
      foo = window.foo;
   }
   alert(foo);
}
bar();

关于Javascript-变量提升,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33540709/

相关文章:

javascript - Mongoose — 使用聚合创建带有 $sum 的新属性

javascript url hashtag更改卸载事件不起作用

javascript - 滚动时指定元素类

javascript - 对象 HTMLInputElement attr 不是函数

javascript - 标题中的图像在 Word for Desktop 中显示,但在 Word Online 中消失

javascript - :target support 的 JS 测试

javascript - 将 div 缩略图切换脚本与图像缩放脚本相结合

javascript - 正则表达式在JS中排除符号前的字符

javascript - 使用 Pace.js 跟踪动态加载的脚本

javascript - 在 Chrome 控制台中修改 document.cookie 不起作用