全局变量是在函数或特定块之外定义的变量。它们可以从 JavaScript 代码的任何地方访问。所有的脚本和函数都能访问全局变量。
你可以使用 var
、let
或者 const
关键字来定义全局变量。没有使用 var
、let
或 const
关键字定义的变量自动成为全局变量。
JavaScript 全局作用域
全局变量具有全局作用域。因此,在函数或块之外声明的变量具有全局作用域。全局作用域在整个作用域内可见或可访问。在客户端 JavaScript 中,全局作用域是正在执行所有代码的网页。使用 var
关键字声明的全局变量属于 window
对象。
var x = 10;
let y = 20;
const z = 30;
这里的变量 x
、y
和 z
被声明在任何函数和块之外,所以它们具有全局作用域,并被称为全局变量。
全局变量示例
让我们通过下面的示例来进一步了解全局变量。
示例
我们在下面的代码中定义了全局变量 x
、y
和 z
。你可以看到,变量可以在代码内的任何地方被访问。
<html>
<head>
<title>JavaScript - 全局变量</title>
</head>
<body>
<p id="output"> </p>
<script>
var x = 10;
let y = 20;
const z = 30;
document.getElementById("output").innerHTML =
"x = " + x + "<br>" +
"y = " + y + "<br>" +
"z = " + z;
</script>
</body>
</html>
输出:
x = 10
y = 20
z = 30
示例
在下面的示例中,我们使用 var
和 let
关键字定义了变量 a
和 b
。你可以看到 a
和 b
变量无论在函数内外都是可访问的,因为它们是全局变量。
<html>
<head>
<title>JavaScript - 全局变量</title>
</head>
<body>
<p id="demo"> </p>
<script>
const output = document.getElementById("demo");
var a = 10;
let b = 20;
function test() {
output.innerHTML += "a -> 在函数内部 = " + a + "<br>";
output.innerHTML += "b -> 在函数内部 = " + b + "<br>";
}
test();
output.innerHTML += "a -> 在函数外部 = " + a + "<br>";
output.innerHTML += "b -> 在函数外部 = " + b + "<br>";
</script>
</body>
</html>
输出:
a -> 在函数内部 = 10
b -> 在函数内部 = 20
a -> 在函数外部 = 10
b -> 在函数外部 = 20
自动全局变量
当你在代码的任何地方定义变量而没有使用 var
、let
或 const
关键字时,该变量自动成为全局变量,并且可以在代码的任何地方访问。
示例
在下面的代码中,我们在函数内部定义了变量 a
而没有使用任何关键字。即使我们在函数内部定义了变量,由于没有使用任何关键字来定义函数,它也成为了全局变量。
输出显示变量 a
可以在函数内外访问。
<html>
<head>
<title>JavaScript - 全局变量</title>
</head>
<body>
<p id="demo"> </p>
<script>
const output = document.getElementById("demo");
function test() {
a = 90;
output.innerHTML += "a -> 在函数内部 = " + a + "<br>";
}
test();
output.innerHTML += "a -> 在函数外部 = " + a + "<br>";
</script>
</body>
</html>
输出:
a -> 在函数内部 = 90
a -> 在函数外部 = 90
在函数或特定块内定义全局变量不是一个好的做法,因为可能会在代码中发生命名冲突。