菜单
×
   ❮     
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

JS 教程

JS HOME JS 简介 JS 位置 JS 输出 JS 语句 JS 语法 JS 注释 JS 变量 JS Let JS Const JS 运算符 JS 算术 JS 赋值 JS 数据类型 JS 函数 JS 对象 JS 对象属性 JS 对象方法 JS 对象显示 JS 对象构造函数 JS 事件 JS 字符串 JS 字符串方法 JS 字符串搜索 JS 字符串模板 JS 数字 JS BigInt JS 数字方法 JS 数字属性 JS 数组 JS 数组方法 JS 数组搜索 JS 数组排序 JS 数组迭代 JS 数组 Const JS 日期 JS 日期格式 JS 日期获取方法 JS 日期设置方法 JS Math JS Random JS 布尔值 JS 比较 JS If Else JS Switch JS Loop For JS Loop For In JS Loop For Of JS Loop While JS Break JS Iterables JS Sets JS Set Methods JS Maps JS Map Methods JS Typeof JS 类型转换 JS Destructuring JS Bitwise JS RegExp JS Precedence JS Errors JS Scope JS Hoisting JS Strict Mode JS this Keyword JS Arrow Function JS Classes JS Modules JS JSON JS Debugging JS 风格指南 JS Best Practices JS Mistakes JS Performance JS Reserved Words

JS 版本

JS 版本 JS 2009 (ES5) JS 2015 (ES6) JS 2016 JS 2017 JS 2018 JS 2019 JS 2020 JS 2021 JS 2022 JS 2023 JS 2024 JS IE / Edge JS 历史

JS 对象

对象定义 对象原型 对象方法 对象属性 对象 Get / Set 对象保护

JS 函数

函数定义 函数参数 函数调用 函数 Call 函数 Apply 函数 Bind 函数闭包

JS 类

类入门 类继承 类静态

JS 异步

JS 回调 JS 异步 JS Promises JS Async/Await

JS HTML DOM

DOM 入门 DOM 方法 DOM Document DOM 元素 DOM HTML DOM 表单 DOM CSS DOM 动画 DOM 事件 DOM 事件监听器 DOM 导航 DOM 节点 DOM 集合 DOM 节点列表

JS Browser BOM

JS Window JS Screen JS Location JS History JS Navigator JS Popup Alert JS Timing JS Cookies

JS Web APIs

Web API 入门 Web 表单 API Web History API Web Storage API Web Worker API Web Fetch API Web Geolocation API

JS AJAX

AJAX 入门 AJAX XMLHttp AJAX Request AJAX Response AJAX XML 文件 AJAX PHP AJAX ASP AJAX 数据库 AJAX 应用 AJAX 示例

JS JSON

JSON 入门 JSON 语法 JSON vs XML JSON 数据类型 JSON 解析 JSON Stringify JSON 对象 JSON 数组 JSON 服务器 JSON PHP JSON HTML JSON JSONP

JS vs jQuery

jQuery 选择器 jQuery HTML jQuery CSS jQuery DOM

JS Graphics

JS Graphics JS Canvas JS Plotly JS Chart.js JS Google Chart JS D3.js

JS 示例

JS 示例 JS HTML DOM JS HTML 输入 JS HTML 对象 JS HTML 事件 JS 浏览器 JS 编辑器 JS 练习 JS 测验 JS 网站 JS 面试准备 JS Bootcamp JS 证书

JS 参考

JavaScript 对象 HTML DOM 对象


JavaScript 作用域

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

JavaScript 变量有 3 种作用域

  • 块作用域
  • 函数作用域
  • 全局作用域

块作用域

在 ES6 (2015) 之前,JavaScript 变量只有全局作用域函数作用域

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

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

在 { } 块内声明的变量不能从块外访问

示例

{
  let x = 2;
}
// 此处不能使用 x

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

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

示例

{
  var x = 2;
}
// 此处可以使用 x

局部作用域

在函数内声明的变量对该函数是局部

示例

// 此处的代码不能使用 carName

function myFunction() {
  let carName = "Volvo";
  // 此处的代码可以使用 carName
}

// 此处的代码不能使用 carName
自己动手试一试 »

局部变量具有函数作用域

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

由于局部变量只能在其函数内识别,因此不同函数可以使用同名变量。

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


函数作用域

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

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

使用 varletconst 声明的变量在函数内部声明时非常相似。

它们都具有函数作用域

function myFunction() {
  var carName = "Volvo";   // 函数作用域
}
function myFunction() {
  let carName = "Volvo";   // 函数作用域
}
function myFunction() {
  const carName = "Volvo";   // 函数作用域
}

全局 JavaScript 变量

在函数外部声明的变量会变成全局变量。

示例

let carName = "Volvo";
// 此处的代码可以使用 carName

function myFunction() {
// 此处的代码也可以使用 carName
}
自己动手试一试 »

全局变量具有全局作用域

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


全局作用域

全局声明的变量(任何函数外部)具有全局作用域

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

在块外部声明的变量(使用 varletconst)非常相似。

它们都具有全局作用域

var x = 2;       // 全局作用域
let x = 2;       // 全局作用域
const x = 2;       // 全局作用域

JavaScript 变量

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

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



自动全局

如果你给一个未声明的变量赋值,它将自动成为全局变量。

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

示例

myFunction();

// 此处的代码可以使用 carName

function myFunction() {
  carName = "Volvo";
}
自己动手试一试 »

严格模式

所有现代浏览器都支持在“严格模式”下运行 JavaScript。

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

在“严格模式”下,未声明的变量不会自动成为全局变量。


HTML 中的全局变量

使用 JavaScript,全局作用域是 JavaScript 环境。

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

使用 var 关键字定义的全局变量属于 window 对象

示例

var carName = "Volvo";
// 此处的代码可以使用 window.carName
自己动手试一试 »

使用 let 关键字定义的全局变量不属于 window 对象

示例

let carName = "Volvo";
// 此处的代码不能使用 window.carName
自己动手试一试 »

警告

除非您打算这样做,否则请勿创建全局变量。

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


JavaScript 变量的生命周期

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

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

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


函数参数

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


×

联系销售

如果您想将 W3Schools 服务用于教育机构、团队或企业,请发送电子邮件给我们
sales@w3schools.com

报告错误

如果您想报告错误,或想提出建议,请发送电子邮件给我们
help@w3schools.com

W3Schools 经过优化,旨在方便学习和培训。示例可能经过简化,以提高阅读和学习体验。教程、参考资料和示例会不断审查,以避免错误,但我们无法保证所有内容的完全正确性。使用 W3Schools 即表示您已阅读并接受我们的使用条款Cookie 和隐私政策

版权所有 1999-2024 Refsnes Data。保留所有权利。W3Schools 由 W3.CSS 提供支持