js高程复习--变量,作用域,内存

  • 5种基本数据类型
    • Undefined, Null, Boolean, Number, String,
    • 按值访问变量(引用类型按引用访问),不同副本
  • 所有函数均是按值传递参数,
    • 针对基本类型的传递不做举例,参数即一个新的副本
    • 针对引用类型,以下是因为传递的值是针对于对象的引用,所以在函数内部的修改在外部也可以体现,而对按值传参最好的解释就是加上注释的代码后,输出不变。因为这时obj是一个新对象的引用,在内部的修改在外部无法体现
    function seNmae(obj){
    	obj.name = "a";
    	//obj = new Object();
    	//obj.name = b;
    }
    
    var person = new Object();
    setName(person);
    console.log(person.name);   //"a"
    
  • typeof检测基本数据类型,instanceof判断对象是谁的实例
  • 执行环境
    • 全局执行环境(window对象)
    • 由执行环境构成作用域链,作用域链只能向后查找
    • 延长作用域链(函数和try-catch, with)
    • js没有块级作用域!!
  • 变量声明
    • 使用var声明的变量会自动添加到最接近的环境中。没有使用声明的变量会自动添加到全局环境(严格模式下会报错)
  • 垃圾收集
    • 自动垃圾收集机制,无需手动跟踪内存的使用情况,机制是找出不被引用的变量,释放他们的内存
      • 标记清除
        当变量进入环境,标记为进入环境,离开环境,标记为离开环境。垃圾收集器在运行的时候会给存储在内存种的变量加上标记,然后会去掉环境中的变量以及被环境中的变量引用的变量的标记,而再此之后被加上标记的变量将被视为准备删除的变量。
      • 引用计数
        跟踪记录每个值被引用的次数,当声明一个变量并且将一个引用类型值赋给该变量时,则这个值的引用次数就是1,如果同一个值又被赋给另一个变量,则该值的引用次数加1,如果包含这个值引用的变量又取得另外一个值,则这个值的引用次数减一,为0即回收
      • 循环引用
      • 手动解除引用让页面获取更好的性能(方便垃圾收集器下一次自动回收)

猜你喜欢

转载自blog.csdn.net/studyForWhat/article/details/89074379
今日推荐