JavaScript中全局变量使用var与不使用var的区别详解

作者:小括号

时间:2026-10-27

浏览:240

本文深入解析JavaScript中全局变量使用var声明与不使用var声明的区别。主要差异在于:通过var定义的全局属性具有不可删除性,且会触发变量提升机制;而不使用var直接赋值则会沿作用域链查找,最终挂载到window对象上且不会提升。

文章目录

全局变量的创建方式

全局变量是开发者熟悉的概念。在函数作用域内,若直接通过 a=1 的形式赋值而未使用 var 声明,该变量将自动成为全局变量。而在全局作用域中,存在三种方式可以创建对全局可见的命名变量。

示例代码如下:

<script>
var a = 1;
b = 2;
window.c = 3;
</script>

对于 b=2 这种写法,其机制与 window.c=3 类似。在执行该赋值语句时,JavaScript 引擎会沿着作用域链向上查找名为 b 的变量。若直至作用域链顶端(即全局对象)仍未找到该变量,引擎便会在全局对象(如浏览器中的 window)上添加一个名为 b 的属性,并将其赋值为 2。

var与非var的核心区别

使用 var 声明与不使用 var 声明全局变量,主要存在以下两点区别:

1. 不可删除性:通过 var 声明的全局变量无法被 delete 操作符删除。这是因为 var 定义的全局属性会被标记为不可配置(non-configurable)。需要注意的是,执行 delete 操作时,即使删除失败也不会抛出错误,delete 操作符会返回 false;若成功删除则返回 true。

2. 变量提升机制:通过 var 声明的全局变量会经历变量提升(hoisting),即变量声明会被提升到当前作用域的顶部;而不使用 var 声明的全局变量则不会发生提升。具体执行结果对比如下:

使用 var 声明的代码示例:

<script>
alert(a);
var a=1;
</script>

不使用 var 声明的代码示例:

<script>
alert(a);//error, a undefined
a=1;
</script>

实用工具推荐

电子包浆

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

使用 ›
图片压缩

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

使用 ›
相关文章