JavaScript 是一种动态类型语言,它允许我们使用变量来存储和操作数据。在本文中,我们将深入探讨 JavaScript 中的变量、作用域和内存管理,以便更好地理解这门语言。
变量
JavaScript 中的变量可以使用 var
、let
和 const
关键字来声明。它们的作用和区别如下:
var
:在函数作用域中声明变量,如果没有使用关键字声明,则默认为全局变量。let
:在块级作用域中声明变量,只能被定义在块级作用域内部访问。const
:也是在块级作用域中声明变量,但只能被赋值一次,之后不能再改变其值。
下面是一些示例代码:
-- -- --- ---- -------- ------ - --- - - -- -- ------ - --- - - -- --------------- -- -- - - --------------- -- -- - - ------- -- -- --- ---- -------- ------ - --- - - -- -- ------ - --- - - -- --------------- -- -- - - --------------- -- -- - - ------- -- -- ----- ---- ----- - - -- -- - - -- -- ----- ----- -------------
作用域
JavaScript 中的作用域可以分为全局作用域和函数作用域。在函数中声明的变量只能在该函数内部访问,而在函数外部声明的变量则可以在整个程序中访问。
ES6 引入了块级作用域,在 {}
内部声明的变量只能在该块级作用域内部访问。
下面是一些示例代码:
-- ----- --- - - -- -------- ------ - --------------- -- -- - - ------- -- ----- -------- ------ - --- - - -- --------------- -- -- - - ------- -- --------------- -- ----- - -------- -- ----- - --- - - -- --------------- -- -- - - -- --------------- -- ----- - ----------
内存管理
JavaScript 中的内存管理是自动的,也称为垃圾回收。当一个对象不再被引用时,它就会被删除,释放其占用的内存空间。
JavaScript 中有两种数据类型:原始类型和引用类型。原始类型的值存储在栈内存中,而引用类型的值存储在堆内存中。
当一个原始类型的变量被重新赋值时,它的旧值会被覆盖掉。而当一个引用类型的变量被重新赋值时,它指向的对象不会被删除,直到没有任何变量引用该对象为止。
下面是一些示例代码:
-- ------------- --- - - -- --- - - -- -- - - ----- - - - -- -- - ------ - ---- --------------- -- -- - --------------- -- -- - -- ------------- --- ---- - - ----- ------- -- --- ---- - ----- -- - ---- ------ ---- --------- - ---- - ---------------------------------------------------------- -------- -------------------------------------------------------------------------------------