JavaScript 变量、作用域及内存

JavaScript 是一种动态类型语言,它允许我们使用变量来存储和操作数据。在本文中,我们将深入探讨 JavaScript 中的变量、作用域和内存管理,以便更好地理解这门语言。

变量

JavaScript 中的变量可以使用 varletconst 关键字来声明。它们的作用和区别如下:

  • var:在函数作用域中声明变量,如果没有使用关键字声明,则默认为全局变量。
  • let:在块级作用域中声明变量,只能被定义在块级作用域内部访问。
  • const:也是在块级作用域中声明变量,但只能被赋值一次,之后不能再改变其值。

下面是一些示例代码:

-- -- --- ----
-------- ------ -
  --- - - --
  -- ------ -
    --- - - --
    --------------- -- -- -
  -
  --------------- -- -- -
-
-------

-- -- --- ----
-------- ------ -
  --- - - --
  -- ------ -
    --- - - --
    --------------- -- -- -
  -
  --------------- -- -- -
-
-------

-- -- ----- ----
----- - - --
-- - - -- -- ----- ----- -------------

作用域

JavaScript 中的作用域可以分为全局作用域和函数作用域。在函数中声明的变量只能在该函数内部访问,而在函数外部声明的变量则可以在整个程序中访问。

ES6 引入了块级作用域,在 {} 内部声明的变量只能在该块级作用域内部访问。

下面是一些示例代码:

-- -----
--- - - --
-------- ------ -
  --------------- -- -- -
-
-------

-- -----
-------- ------ -
  --- - - --
  --------------- -- -- -
-
-------
-- --------------- -- ----- - --------

-- -----
-
  --- - - --
  --------------- -- -- -
-
-- --------------- -- ----- - ----------

内存管理

JavaScript 中的内存管理是自动的,也称为垃圾回收。当一个对象不再被引用时,它就会被删除,释放其占用的内存空间。

JavaScript 中有两种数据类型:原始类型和引用类型。原始类型的值存储在栈内存中,而引用类型的值存储在堆内存中。

当一个原始类型的变量被重新赋值时,它的旧值会被覆盖掉。而当一个引用类型的变量被重新赋值时,它指向的对象不会被删除,直到没有任何变量引用该对象为止。

下面是一些示例代码:

-- -------------
--- - - --
--- - - -- -- - - ----- -
- - -- -- - ------ - ----
--------------- -- -- -
--------------- -- -- -

-- -------------
--- ---- - - ----- ------- --
--- ---- - ----- -- - ---- ------ ----
--------- - ----

- ---------------------------------------------------------- --------
-------------------------------------------------------------------------------------