数据-变量-内存 详解

2018-05-02  本文已影响0人  zhangjingbibibi

这篇文章主要详解讲解 数据-变量-内存的详细意义,同时理一理它们之间的关系。




简单代码演示:

 var a1 = 3   //这个就是基础数据类型
  var a2 = a1 + 4           //这里的al就是3,然后进行算术计算
  var a3 = {}           //这个就是引用类型,a3里面是对象的地址
  a3.name = 'Tom'       //name相当于对象中TOM这个值的标识名

关于赋值和内存的问题

这里先扔出一个问题:

简单代码演示:

var a = 3      //a内存中保存的就是3
  a = function () {

  }       ///a内存保存的是对象的地址

var b = 'abc'    //b内存中保存的是‘abc’
a = b                   //a内存保存的就是b内存的内容,即‘abc’
b = []                  //b内存保存的是array的地址
a = b         //a内存保存的就是b内存的内容,即array的地址

关于引用变量赋值问题

  //1. 2个引用变量指向同一个对象, 通过一个引用变量修改对象内部数据, 另一个引用变量也看得见
  var obj1 = {}
  var obj2 = obj1
  obj2.name = 'Tom'
  console.log(obj1.name)   //输出Tom
  function f1(obj) {
    obj.age = 12
  }
  f1(obj2)
  console.log(obj1.age)
//输出 12

  //2. 2个引用变量指向同一个对象,让一个引用变量指向另一个对象, 另一个引用变量还是指向原来的对象
  var obj3 = {name: 'Tom'}
  var obj4 = obj3
  obj3 = {name: 'JACK'}
  console.log(obj4.name)   //输出 Tom

关于数据传递问题

简单代码演示:

  function f(a) {
    console.log(a)
  }
  var n = 4
  f(n) //传递的是n的值 --->值传递
//输出4

  function f2(a) {
    a.name = 'atguigu'
  }
  n = {}
  f2(n) // 传递的是n指向的对象 ---> 引用传递   ???  传的智商n里面的内容  也就是{}的地址
  console.log(n.name)
  //输出atguigu

JS引擎如何管理内存?

  var obj = {}
  obj = null // ?
 //内存还有obj,并且它的值为null

  function fn () {
    var a = 3
    var b = {}
  }
  fn() // ?
  //内存中已经没有a和b了  但是有fn
上一篇 下一篇

猜你喜欢

热点阅读