JavaScript 范围
范围决定变量的可访问性(可见性)。
JavaScript 有 3 种类型的作用域:
- 块范围
- 函数作用域
- 全球范围
块范围
在 ES6(2015)之前,JavaScript 只有 全局范围 和函数作用域.
ES6 引入了两个重要的新 JavaScript 关键字: let
和const
.
这两个关键字提供 块范围 在 JavaScript 中。
在 { } 块内声明的变量不能从块外部访问:
例子
{
让 x = 2;
}
// x 不能在这里使用
使用以下语句声明的变量 var
关键字不能具有块作用域。
在 { } 块内声明的变量可以从块外部访问。
例子
{
变量 x = 2;
}
// x 可以在这里使用
本地范围
在 JavaScript 函数中声明的变量变为 当地的 到该函数。
例子
// 此处的代码不能使用 carName
函数 myFunction() {
让 carName = "Volvo";
// 此处的代码可以使用 carName
}
// 此处的代码不能使用 carName
亲自尝试 »
局部变量有 函数作用域:
它们只能从函数内部访问。
由于局部变量仅在其函数内部被识别,因此可以在不同的函数中使用同名的变量。
局部变量在函数启动时创建,在函数完成时删除。
函数作用域
JavaScript 具有函数作用域:每个函数都会创建一个新的作用域。
函数内部定义的变量不能从函数外部访问(可见)。
使用以下方式声明的变量 var
, let
和const
在函数内部声明时非常相似。
他们都有 函数作用域:
函数 myFunction() {
var carName = "Volvo"; // 函数范围
}
函数 myFunction() {
let carName = "Volvo"; // 函数范围
}
函数 myFunction() {
const carName = "Volvo"; // 函数范围
}
全局 JavaScript 变量
在函数外部声明的变量变为 全球的.
全局变量有 全局范围:
网页上的所有脚本和函数都可以访问它。
全局范围
声明的变量 全球 (在任何函数之外)有全局范围.
全球的 可以从 JavaScript 程序中的任何位置访问变量。
使用以下方式声明的变量 var
, let
和const
在块外声明时非常相似。
他们都有 全局范围:
var x = 2; // 全局范围
let x = 2; // 全局范围
const x = 2; // 全局范围
JavaScript 变量
在 JavaScript 中,对象和函数也是变量。
范围决定了代码不同部分对变量、对象和函数的可访问性。
自动全局
如果你给一个没有声明的变量赋值,它将自动变为 全球的 多变的。
此代码示例将声明一个全局变量 carName
,即使该值是在函数内部分配的。
严格模式
所有现代浏览器都支持在“严格模式”下运行 JavaScript。
您将在本教程的后面章节中了解有关如何使用严格模式的更多信息。
在“严格模式”下,未声明的变量不会自动成为全局变量。
HTML 中的全局变量
对于 JavaScript 来说,全局范围就是 JavaScript 环境。
在 HTML 中,全局范围是窗口对象。
使用以下方式定义的全局变量 var
关键字属于窗口对象:
使用以下方式定义的全局变量 let
关键字不属于窗口对象:
警告
除非您有意,否则请不要创建全局变量。
您的全局变量(或函数)可以覆盖窗口变量(或函数)。
任何函数,包括窗口对象,都可以覆盖全局变量和函数。
JavaScript 变量的生命周期
JavaScript 变量的生命周期从声明时开始。
函数(局部)变量在函数完成时被删除。
在网络浏览器中,当您关闭浏览器窗口(或选项卡)时,全局变量会被删除。
函数参数
函数参数(参数)在函数内部充当局部变量。