JS 变量的存储位置揭秘:你真的理解了吗?
2023-12-28 10:52:08
问题的根源:谁之过?
在 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 变量的存储位置,从而在开发中游刃有余。