JavaScript中的全局变量是如何工作的?

JavaScript中的全局变量是如何工作的?,javascript,global-variables,scope,Javascript,Global Variables,Scope,我是javascript的新手。我通常用Java编程。我被下面的代码片段弄糊涂了 <script> x = "foo"; function bar(p){ if (p){ document.writeln("x = " + x); } else { var x = "baz"; } } bar("baz"); </script> 既然x是一个全局变量,它为什么要打印未定义,它应该打印foo-right?有人能解释一下吗 因为x是一个全

我是javascript的新手。我通常用Java编程。我被下面的代码片段弄糊涂了

<script>
 x = "foo";

function bar(p){
  if (p){
    document.writeln("x = " + x);
  } else {
    var x = "baz";
  }
}

bar("baz");

</script>
既然x是一个全局变量,它为什么要打印未定义,它应该打印foo-right?有人能解释一下吗

因为x是一个全局变量,所以它应该正确地打印foo

如果它没有被
var x=“baz”隐藏,它就会被隐藏起来在函数中进一步向上声明;由于提升,它将执行函数,就像您编写

function bar(p){
  var x; // = undefined

  if (p){
    document.writeln("x = " + x);
  } else {
    x = "baz";
  }
}

要使代码实现您想要的功能,只需编写
x=“baz”而不是
var x=“baz”

尝试此输出是
x=foo

var x="foo";
function bar(p){

  if (p){
    document.writeln("x = " + x);
  } else {
    x = "baz";
  }
}

bar("baz");

不要在
var x=“baz”中向x添加var刚刚
x=“baz”
var x="foo";
function bar(p){

  if (p){
    document.writeln("x = " + x);
  } else {
    x = "baz";
  }
}

bar("baz");