码迷,mamicode.com
首页 > Web开发 > 详细

JS变量小总

时间:2019-05-31 19:52:34      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:大小   修改   常见   gif   json对象   strong   boolean   amp   根据   

变量分类:
1、栈内存(stack)和堆内存(heap)
2、基本类型和引用类型

#栈内存(stack)
  一般为静态分配内存,其分配的内存系统自动释放。

#堆内存(heap) 
  一般为动态分配内存,其分配的内存,系统不释放,哪怕程序退出,那一块还是在那里。

#为何会有栈内存和堆内存之分
1、 和垃圾回收机制有关。为了使程序运行时占用的内存最小;
2、 当一个方法执行时,每个方法都会建立自己的栈内存,在这个方法内定义的变量将会逐个放入这块栈内存中,随着方法的执行结束而销毁;
3、 当我们在程序中创建一个对象时,这个对象将被保存到运行时数据区中,以便反复利用,这个运行时数据区就是堆内存。堆内存中的对象不会随方法的结束而销毁,即使方法结束后,这个对象还可能被另一个引用变量所引用(方法的传递参数时很常见),则这个对象依然不会被销毁,只有当一个对象内有任何引用变量引用时,系统的垃圾回收机制才会在核实的时候回收它;

*基本类型五类:

  Number、String、Null、Undefined、Boolean,这些类型在内存中分别占有固定大小的空间,它们的值保存在栈空间,我们是通过值来访问的;

*引用类型:
  Array、Date、Math、RefExp、Function等
Object对象(指保存在堆内存中的对象);引用类型,值大小不固定,栈内存中存放地址指向堆对象。

#简单说明:
  栈内存中存放的只是该对象的访问地址,在堆内存中为这个值分配空间。由于这种值不固定,因此不能把他们保存到栈内存中。但内存地址大小是固定的,因此可以将内存地址保存在栈内存中。这样,当查询引用类型的变量时,先从栈中读取内存地址,然后再通过地址找到堆中的值。

基本类型和引用类型的区别
  实际区别是传值与传址;

%传值:

%传址:

&浅拷贝:

  浅拷贝指只是复制一层对象,当对象的属性是引用类型的时,实质复制的是其引用地址,两个对象指向同一个内存地址时修改其中任意值,另一个值也会随之改变;(在定义一个对象或数组时,变量存放的往往只是一个地址。当我们使用对象拷贝时,如果属性是对象或数组时,这时我们传递的也只是一个地址。因此子对象在访问该属性时,会根据地址回溯到父对象的堆内存中,此时父子对象发生了关联,两者的属性值会指向同一存储空间;)


&深拷贝:

  深拷贝是指复制对象的所有层级,将对象及其值都复制过来,两个对象修改其中任意的值另一个值不会改变。

&深拷贝的实现方法:

1、 通过递归方法实现;
2、 通过JSON解析实现;对象转成JSON字符串再转成JSON对象:JSON.parse( JSON.stringify(o) );

JS变量小总

标签:大小   修改   常见   gif   json对象   strong   boolean   amp   根据   

原文地址:https://www.cnblogs.com/Angxf/p/10957037.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!