变量、作用域和内存问题

  • 变量

JavaScript变量可以用来保存两种类型的值:基本类型和引用类型

  • 基本类型值在内存中占据固定大小的空间,因此被保存在栈内存中
  • 引用类型的值是对象,保存在堆内存中
  • 从一个变量向另一个变量复制基本类型的值,会创建这个值的一个副本
  • 包含引用类型值的变量实际上包含的并不是对象本身,而是一个指向该对象的指针
  • 从一个变量向另一个变量复制引用类型的值,复制的其实是指针,因此两个变量最终都指向同一个对象
  • 确定一个值是哪种基本类型使用typeof操作符,而确定一个值是哪种引用类型可以使用instanceof操作符
  • 作用域

所有变量都存在于一个执行环境中,执行环境决定了变量的生命周期

  • 执行环境分为全局环境和函数执行环境
  • 函数的局部环境可以访问父环境,全局环境不能访问局部环境
  • 变量的执行环境有助于确定应该何时释放环境
  • 内存问题

JavaScript具有自动垃圾收集机制,执行环境会负责管理代码执行过程中使用的内存。

  • 标记清除

    当变量进入环境时,就将这个变量标记为“进入环境”,当变量离开环境时,将其标记为“离开环境”

  • 引用计数

    跟踪记录每个值被引用的次数。JavaScript引擎目前不再使用。当代码中存在循环引用现象时,“引用计数”会导致问题

  • 解除变量

    有助于消除循环引用现象,对垃圾收集也有好处

猜你喜欢

转载自www.cnblogs.com/ujoxia/p/12800314.html
今日推荐