美文网首页
第四章 变量、作用域和内存问题

第四章 变量、作用域和内存问题

作者: dudu_du | 来源:发表于2017-06-15 13:30 被阅读0次

    ECMAScript变量分为两种不同数据类型的值:基本类型值和引用类型值。

    基本数据类型:Undefined,Null,Boolean,Number,String,按值访问

    引用数据类型:对象,按引用访问

    ECMAScript中所有函数的参数都是按照值传递的。也就是说,把函数外部的值复制到函数的内部的参数,就和把值从一个变量复制到另一个变量一样。

    function setName(obj){
      obj.name = "zhang";
      obj = new Object();
      obj.name = "greg";
    }
    var person = new Object();
    setName(person);
    console.log(person.name);
    

    检测基本类型的方法:typeof;
    检测什么类型对象的方法:instance;

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

    “标记清除”是目前主流的垃圾收集算法,思想是给当前不适用的值加上标记,然后在回收其内存。
    另一种垃圾收集算法是“引用计数”,这种算法的思想是跟踪记录所有制被引用的次数。JavaScript引擎目前都不在使用这种算法,但在IE中访问非原生JavaScript对象(如DOM元素)时,这种算法仍然会导致问题。
    解除变量的引用不仅有助于消除循环引用对象,而且对垃圾收集有好处。

    相关文章

      网友评论

          本文标题:第四章 变量、作用域和内存问题

          本文链接:https://www.haomeiwen.com/subject/adnyqxtx.html