目录

JavaScript 作用域

作用域决定变量的可访问性(可见性)。

JavaScript 有 3 种类型的作用域:

  • 块作用域
  • 功能作用域
  • 全局作用域

块作用域

在 ES6(2015)之前,JavaScript 只有全局作用域功能作用域

ES6 引入了两个重要的新 JavaScript 关键字:letconst

这两个关键字提供块作用域在 JavaScript 中。

无法从块外部访问 { } 块内声明的变量:

示例

{
  let x = 2;
}
// x can NOT be used here

声明的变量var关键字不能具有块作用域。

可以从块外部访问在 { } 块内声明的变量。

示例

{
  var x = 2;
}
// x CAN be used here

本地作用域

在 JavaScript 函数中声明的变量变为当地的到函数。

示例

// code here can NOT use carName

function myFunction() {
  let carName = "Volvo";
  // code here CAN use carName
}

// code here can NOT use carName
亲自试一试 »

局部变量有功能作用域

它们只能从函数内部访问。

由于局部变量仅在其函数内部被识别,因此具有相同名称的变量可以在不同的函数中使用。

局部变量在函数启动时创建,并在函数完成时删除。


功能作用域

JavaScript 具有函数作用域:每个函数都会创建一个新的作用域。

函数内部定义的变量无法从函数外部访问(可见)。

声明的变量var,letconst在函数内部声明时非常相似。

他们都有功能作用域

function myFunction() {
  var carName = "Volvo";   // Function Scope
}
function myFunction() {
  let carName = "Volvo";   // Function Scope
}
function myFunction() {
  const carName = "Volvo";   // Function Scope
}

全局 JavaScript 变量

在函数外部声明的变量变为全局的

示例

let carName = "Volvo";
// code here can use carName

function myFunction() {
// code here can also use carName
}
亲自试一试 »

全局变量有全局作用域

网页上的所有脚本和函数都可以访问它。


全局作用域

声明的变量全局作用域(在任何功能之外)有全局作用域

全局的可以从 JavaScript 程序中的任何位置访问变量。

声明的变量var,letconst在块外声明时非常相似。

他们都有全局作用域

var x = 2;       // Global scope
let x = 2;       // Global scope
const x = 2;       // Global scope

JavaScript 变量

在 JavaScript 中,对象和函数也是变量。

作用域决定了代码不同部分的变量、对象和函数的可访问性。



自动全局

如果你给一个没有声明的变量赋值,它会自动变成一个全局的多变的。

此代码示例将声明一个全局变量carName,即使该值是在函数内部分配的。

示例

myFunction();

// code here can use carName

function myFunction() {
  carName = "Volvo";
}
亲自试一试 »

严格模式

所有现代浏览器都支持在 "Strict Mode" 中运行 JavaScript。

您将在本教程的后续章节中了解有关如何使用严格模式的更多信息。

在"Strict Mode" 中,未声明的变量不会自动成为全局变量。


HTML 中的全局变量

对于 JavaScript,全局作用域是 JavaScript 环境。

在 HTML 中,全局作用域是 window 对象。

全局变量定义为var关键字属于window对象:

示例

var carName = "Volvo";
// code here can use window.carName
亲自试一试 »

全局变量定义为let关键字不属于 window 对象:

示例

let carName = "Volvo";
// code here can not use window.carName
亲自试一试 »

警告

除非您愿意,否则不要创建全局变量。

您的全局变量(或函数)可以覆盖窗口变量(或函数)。
任何函数,包括窗口对象,都可以覆盖全局变量和函数。


JavaScript 变量的生命周期

JavaScript 变量的生命周期从声明时开始。

函数(局部)变量在函数完成时被删除。

在 Web 浏览器中,当您关闭浏览器窗口(或选项卡)时,全局变量将被删除。


函数参数

函数参数(参数)在函数内部充当局部变量。