js的变量,作用域,内存

一,基本类型和引用类型的值
基本类型的值是按值访问的,引用类型的值是保存在内存中的对象
1,动态的属性
  只有引用类型的值可以添加属性方法
  不能给基本类型添加属性和方法
2,复制变量值
  复制基本类型的值,两个变量参与的操作互不影响
  复制引用类型的值,两个变量引用同一个对象,改变之一,会影响其二
3,传递参数
  按值传递,被传递的值会被复制给一个局部变量
  函数内部重写对象,这个变量引用就是一个局部对象了,这个对象会在函数执行 后消失
4,检验类型
  instanceof操作符
  result = 变量 instanceof 类型 返回true或false
二,执行环境及作用域
全局环境是window对象
1,延长作用域链
  try-catch语句的catch块
  with语句
2,没有块级作用域
  if和for语句 当中的变量声明在if和for语句结束后也依旧存在于循环外部的 执行环境中
  1)声明变量
  var声明的变量添加到附近最近的环境当中,未用var声明的为全局变量
  2)查询标识符
  搜索过程,如果在局部环境中找到了该标识符,搜索停止,变量就绪,如果 局部变量中没有找到,沿作用域继续寻找,一直追溯到全局环境的变量对 象,如果   全局变量尚没有找到,则意味着此变量尚未声明
三,垃圾收集
1,标记清除
  变量进入环境时被标记进入环境,离开时被标记离开环境
2,引用计数
  跟踪记录每个值被引用的次数,释放引用次数为0的值所占的内存
  循环引用的时候会出现问题
3,性能问题
4,管理内存
  一旦数据不在使用,将其设置为null,解除引用

原文地址:https://www.cnblogs.com/b0xiaoli/p/3604607.html