详解JavaScript 作用域:局部、全局与块级变量

作者:青柠

时间:2026-10-23

浏览:465

本文详细解析 JavaScript 中的作用域机制,涵盖局部变量与全局变量的定义、生命周期及访问规则。重点对比 var 与 ES6 let 关键字在作用域上的差异,阐述块级作用域的概念,并说明函数参数及 window 对象在变量管理中的角色。

文章目录

JavaScript 作用域概述

作用域定义了程序中可访问变量的范围集合。

JavaScript 作用域概述

在 JavaScript 语言中,对象和函数本质上也是变量的一种形式。

因此,JavaScript 中的作用域指的是可访问的变量、对象以及函数的集合范围。

JavaScript 函数作用域:变量在函数内部进行修改和定义。

局部作用域与全局变量

JavaScript 局部作用域

当变量在函数内部被声明时,该变量具有局部作用域。

局部变量的特点在于其访问权限仅限于声明它的函数内部。


// 此处不能调用 carName 变量
function myFunction() {
  var carName = "Volvo";
  // 函数内可调用 carName 变量
}

由于局部变量的作用范围限制在函数内部,不同的函数可以使用相同名称的变量而互不干扰。

局部变量在函数开始执行时被创建,并在函数执行结束后自动销毁。

JavaScript 全局变量

变量若在函数外部定义,则被视为全局变量。

全局变量拥有全局作用域,意味着网页中的所有脚本和函数均可访问该变量。


var carName = " Volvo";
 
// 此处可调用 carName 变量
function myFunction() {
  // 函数内可调用 carName 变量
}

如果在函数内部声明变量时未使用 var 关键字,该变量将自动成为全局变量。

在以下示例中,carName 虽然在函数内部定义,但由于未使用 var 声明,它实际上是一个全局变量。


// 此处可调用 carName 变量
 
function myFunction() {
  carName = "Volvo";
  // 此处可调用 carName 变量
}

变量生命周期与函数参数

JavaScript 变量生命周期

JavaScript 变量的生命周期从其被声明并初始化时开始。

局部变量的生命周期随函数执行结束而终止,即被销毁。

全局变量的生命周期则持续到页面关闭为止。

函数参数

函数参数仅在函数内部生效,被视为局部变量。

HTML 全局变量与 window 对象

HTML 中的全局变量

在 HTML 环境中,全局变量属于 window 对象,所有数据变量均归属于 window 对象。


//此处可使用 window.carName
 
function myFunction() {
  carName = "Volvo";
}

你知道吗?

你的全局变量或函数可以覆盖 window 对象的变量或函数。此外,局部变量(包括 window 对象)也可以覆盖全局变量和函数。

补充

ES6 let 关键字与块级作用域

ES6 中的 let 关键字

let 关键字允许声明一个作用域被限制在块级中的变量、语句或表达式。与 var 关键字不同,let 声明的变量只能是全局的或整个函数块的,无法在块级作用域外访问。

let 语法:

let var1 [= value1] [, var2 [= value2]] [, ..., varN [= valueN]];

let 声明的变量仅在其声明的块或子块中可用,这一点与 var 相似。二者之间最主要的区别在于,var 声明的变量的作用域是整个封闭函数,而 let 则是块级作用域。

let 和 var 的区别代码实例:


function varTest() {
 var x = 1;
 if (true) {
  var x = 2; // 同样的变量!
  console.log(x); // 2
 }
 console.log(x); // 2
}

function letTest() {
 let x = 1;
 if (true) {
  let x = 2; // 不同的变量
  console.log(x); // 2
 }
 console.log(x); // 1
}

以上就是详解JavaScript 作用域的详细内容,更多关于JavaScript 作用域的资料请关注本站其它相关文章!

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章