js中的变量

来源:互联网 发布:韩国东大门知乎 编辑:程序博客网 时间:2024/06/06 19:56


1.原始数据类型

  原始数据保存在栈中,栈中同时存放着变量的标识符和变量的值。数字,字符串和布尔值虽然拥有方法,但是它们的值无法改变(immutable)。我们也不能给原始数据类型添加属性和方法。

  • null
  • undefined
  • 数字(number)
  • 字符串(string)
  • 布尔值(boolean)

2.引用类型

  其他所有的值都是对象,数组,函数,正则表达式,对象都是对象。引用类型的值是同时保存在栈(stack)和堆(heap)中的对象。栈中存储的是变量标识符和指向堆内存中该对象的指针。对象永远不会被复制,对象通过引用来传递。


  • 函数:函数是对象,因此函数可以像其他值一样被使用。函数可以保存在变量,对象,数组中。函数可以当作参数传递给其他函数,也可以返回函数,函数也可以拥有方法。var array =[3,4];var slice =Array.prototype.slice; args=slice.apply(array ); apply方法将参数数组传递给调用函数slice。引用类型的形参会影响实参。
  •  1     function fun(data,callback){ 2         var json=[1,2,3]; 3         callback(json) 4     } 5  6     var data=[]; 7     fun(data,function(result){ 8         data=result; 9     })10     console.log(data)//[1, 2, 3]

  • 3.堆和栈

  • 堆栈在数据结构里面的含义就是一组数据的存放方式 后进先出 

      push: 在最顶层加入数据

      pop: 返回并移除最顶层的数据

      top:  返回最顶层数据的值 但不移除

      isempty: 返回一个布尔值 表示当前stack是否为空栈

      Stack 是一种存放数据的内存区域。系统会划分出两张不同的内存空间 stack(栈) 和堆(heap)

      stack (栈)是有结构的(就像后进先出 从下到上) 每一个区域都按照一定次序存放,可以明确知道每个区块的大小。 heap是没有结构 数据可以任意存放。因此stack的寻址速度要快于heap。

      一般来说 每个线程分配一个stack(栈) 每个进程分配一个heap。就是说 stack独占线程,heap是共享线程。

      所以 数据存放的规则是 只要是局部的 占用空间确定的数据 一般都存放在stack里面。否则就放在heap里面局部变量一旦运行结束 就会GC回收 而heap的那个对象实例直到系统的GC将这里的内存回收。因此一般内存泄漏都方生在heap

      使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,这些洗碗 后续工作好像就是垃圾回收 不用我们自己动手。他的好处是快捷,但是自由度小。

     

    使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,但是要我们自己动手去收拾这些 东西 洗碗等等 而且自由度大


原创粉丝点击