返回

JS 变量的存储位置揭秘:你真的理解了吗?

前端

问题的根源:谁之过?

在 JavaScript 的世界中,变量的存储位置是一个经常被误解和忽视的话题。许多文章在讨论 JS 变量时,往往忽略了这一点,导致读者对变量的理解存在偏差。究其原因,可以追溯到 JavaScript 的祖师爷——Brendan Eich。

Brendan Eich 在设计 JavaScript 时,为了简化开发流程,做了一个偷懒的决定:将全局变量直接存储在全局对象中。这个全局对象就是著名的 window 对象。这样一来,在 JavaScript 中,全局变量就成了 window 对象的属性。

JS 中全局变量的存储位置

既然全局变量存储在 window 对象中,那么我们就可以通过 window 对象访问和修改这些变量。例如,我们可以这样访问全局变量 myGlobalVar:

console.log(window.myGlobalVar);

我们也可以这样修改全局变量 myGlobalVar:

window.myGlobalVar = 100;

let 声明的全局变量的存储位置

在 ES6 中,引入了 let ,它可以用来声明全局变量。与 var 声明的全局变量不同,let 声明的全局变量不会被存储在 window 对象中。相反,它们会被存储在全局作用域中。

全局作用域是一个特殊的概念,它不是指某个特定的对象,而是指一个独立的内存空间。在这个内存空间中,存储着所有全局变量和函数。

var 声明的变量和用 window.a 添加的变量的差别

虽然 var 声明的全局变量和用 window.a 添加的变量都存储在 window 对象中,但它们之间还是存在着一些差异。

首先,var 声明的全局变量可以在任何地方访问,而用 window.a 添加的变量只能在 window 对象内部访问。

其次,var 声明的全局变量在声明时就会被初始化,而用 window.a 添加的变量只有在第一次被访问时才会被初始化。

最后,var 声明的全局变量可以被重新赋值,而用 window.a 添加的变量不能被重新赋值。

相关高频笔试题/知识点总览

  • 全局变量的存储位置: 全局变量存储在 window 对象中。
  • let 声明的全局变量的存储位置: let 声明的全局变量存储在全局作用域中。
  • var 声明的变量和用 window.a 添加的变量的区别: var 声明的全局变量可以在任何地方访问,而用 window.a 添加的变量只能在 window 对象内部访问;var 声明的全局变量在声明时就会被初始化,而用 window.a 添加的变量只有在第一次被访问时才会被初始化;var 声明的全局变量可以被重新赋值,而用 window.a 添加的变量不能被重新赋值。

结语

在 JavaScript 中,变量的存储位置是一个非常重要的概念。理解了变量的存储位置,才能真正理解变量的行为。希望本文能够帮助您深入理解 JS 变量的存储位置,从而在开发中游刃有余。