JavaScript 范围
范围决定变量的可访问性(可见性)。
JavaScript 变量有 3 种范围
- 块级作用域
- 函数作用域
- 全局作用域
块级作用域
在 ES6(2015)之前,JavaScript 变量只有 全局作用域 和 函数作用域。
ES6 引入了两个重要的 JavaScript 关键字:let
和 const
。
这两个关键字在 JavaScript 中提供了 块级作用域。
在 { } 块中声明的变量无法从块外访问
示例
{
let x = 2;
}
// 这里无法使用 x
使用 var
关键字声明的变量无法具有块级作用域。
在 { } 块中声明的变量可以从块外访问。
示例
{
var x = 2;
}
// 这里可以使用 x
局部作用域
在 JavaScript 函数中声明的变量对函数来说是 局部 的
示例
// 这里的代码无法使用 carName
function myFunction() {
let carName = "Volvo";
// 这里的代码可以使用 carName
}
// 这里的代码无法使用 carName
自己尝试一下 »
局部 变量具有 函数作用域
它们只能在函数内部访问。
由于局部变量只在它们所属的函数内部被识别,因此可以在不同的函数中使用同名的变量。
局部变量在函数开始时创建,在函数完成时删除。
函数作用域
JavaScript 有函数作用域:每个函数都会创建一个新的作用域。
在函数内部定义的变量无法从函数外部访问(可见)。
使用 var
、let
和 const
声明的变量在函数内部声明时非常相似。
它们都具有 函数作用域
function myFunction() {
var carName = "Volvo"; // 函数作用域
}
function myFunction() {
let carName = "Volvo"; // 函数作用域
}
function 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 中,全局作用域是 window 对象。
使用 var
关键字定义的全局变量属于 window 对象
使用 let
关键字定义的全局变量不属于 window 对象
警告
不要创建全局变量,除非你确实需要。
你的全局变量(或函数)可能会覆盖 window 变量(或函数)。
任何函数,包括 window 对象,都可能覆盖你的全局变量和函数。
JavaScript 变量的生命周期
JavaScript 变量的生命周期从它被声明时开始。
函数(局部)变量在函数执行完毕后被删除。
在 Web 浏览器中,全局变量在关闭浏览器窗口(或标签页)时被删除。
函数参数
函数参数(参数)在函数内部作为局部变量工作。