JavaScript变量的作用域介绍

JavaScript变量的作用域介绍

JavaScript 变量的作用域决定了变量在代码中的可访问性。

var 是 JavaScript 中最早用于声明变量的关键字,它函数作用域或全局作用域。

let 关键字,具有块级作用域、全局作用域。

const关键字,具有块级作用域、全局作用域。

var、let 和 const 关键字对比表

特性

var

let

const

作用域

函数作用域或全局作用域

块级作用域、全局作用域

块级作用域、全局作用域

变量提升

提升到作用域顶部,初始化为 undefined

声明前访问会报错,因存在“暂时性死区”(Temporal Dead Zone)

声明前访问会报错,因存在“暂时性死区”(Temporal Dead Zone)

重复声明

合法,后续声明覆盖前一个值

不合法,抛出 SyntaxError

不合法,抛出 SyntaxError

是否可变

可变

可变

不可变(引用不可变,但内容可变)【注】

是否成为全局对象属性

是(在全局上下文中)

【注:const 声明的变量不可重新赋值,但若为对象/数组,其内容可修改。示例:
const arr = [1, 2];
arr.push(3); // 允许
arr = [4, 5]; // 报错 】

下面展开介绍

1. 作用域类型

全局作用域(Global Scope

  • 定义:在函数外声明的变量。
  • 特点
    • 任何地方都可访问,包括函数内部。过度使用全局变量可能导致命名冲突和代码难以维护。
    • 在浏览器环境中,全局变量通常与 window 对象关联。
    • 浏览器环境中,var 声明的全局变量会成为 window 对象(在浏览器环境中)的属性,let 和 const 不会。
  • 注意

避免隐式全局变量,始终显式声明变量。

在非严格模式下,未使用 var、let 或 const 关键字声明的变量会被隐式提升为全局变量。

在严格模式下,未声明的变量会导致 ReferenceError,因此不会创建隐式全局变量。

var:在全局上下文中声明的变量会成为全局对象的属性,具有全局作用域。

let 和 const:在全局上下文中声明的变量是全局变量,但不会成为全局对象的属性; let 或 const 关键字还可以声明块级作用域(见后面)。

  • 全局变量的创建方式: 

1)隐式全局变量:

myGlobalVar = "Hello, World!"; // 隐式全局变量
console.log(myGlobalVar); // 输出 "Hello, World!"
console.log(window.myGlobalVar); // 输出 "Hello, World!",因为它是 window 的属性

2)显式全局变量:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学习&实践爱好者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值