JS变量小总
变量分类:
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变量小总的更多相关文章
- js变量及其作用域(附例子及讲解)
Javascript和Java.C这些语言不同,它是一种无类型.弱检测的语言.它对变量的定义并不需要声明变量类型,我们只要通过赋值的形式,可以将各种类型的数据赋值给同一个变量 工具/原料 Ch ...
- js变量及其作用域
Javascript和Java.C这些语言不同,它是一种无类型.弱检测的语言.它对变量的定义并不需要声明变量类型,我们只要通过赋值的形式,可以将各种类型的数据赋值给同一个变量 一.js变量的类型及 ...
- JS 数据类型转换-转换函数、强制类型转换、利用js变量弱类型转换
1. 转换函数: js提供了parseInt()和parseFloat()两个转换函数.前者把值转换成整数,后者把值转换成浮点数.只有对String类型调用这些方法,这两个函数才能正确运行:对其他类型 ...
- JS变量重复声明以及忽略var 声明的问题及其背后的原理
腾讯的一个笔试题,先看一下 var a = 100; function fn() { alert(a); //undefined var a = 200; alert(a); //200 } fn() ...
- 【repost】 JS变量重复声明以及忽略var 声明的问题及其背后的原理
JS的容错率很高,一些其他语言常见的小错误JS都能大度得包容,比如给一个方法传入超出预计的参数.在声明变量之前使用该变量(变量的声明提升解决了这个问题)等等,这里我们就要解剖一下JS变量重复声明以及当 ...
- JS变量对象详解
JS变量对象详解 开年之后工作热情一直不是很高,这几天一直处于消极怠工状态.早上不想起床,起床了不想上班.明明放假之前工作热情还一直很高,一直心心念念的想把小程序项目怼出来,结果休假回来之后画风完全不 ...
- js闭包小实验
js闭包小实验 一.总结 一句话总结: 闭包中引用闭包外的变量会使他们常驻内存 function foo() { var i=0; return function () { console.log(i ...
- JS处理事件小技巧
今天,就分享一下我自己总结的一些JS的小技巧: ①防止鼠标选中事件 <div class="mask" onselectstart="return false&qu ...
- javascirpt对象运用与JS变量
abcdefghijklmnopqrstuvwyz String 对象方法 charAt() 方法可返回指定位置的字符.stringObject.charAt(index)(index从0开始)[ht ...
随机推荐
- layui编辑商品时,怎么使用下拉菜单显示商品默认分类的问题
//加载商品默认的分类$.get('/admin/category/selec/' + {$simple.0.first_pid},function(msg){ $("#two_cate&q ...
- python selenium unittest Fixture(setUp/tearDown)笔记
Fixture用途: 1.做测试前后的初始化设置,如测试数据准备,链接数据库,打开浏览器等这些操作都可以使用fixture来实现 2.测试用例的前置条件可以使用fixture实现 Fixture使用: ...
- 整理今天js留下的作业(点击换图片换首页背景图)
<div class="buttons"> <button id="katong">卡通</button> <b ...
- Apache自定义404
先用命令找到httpd.conf文件在哪 find -name 'httpd.conf' 默认配置文件: vim /etc/httpd/conf/httpd.conf 然后找到项目的路径 <Di ...
- 14.1 Go数据结构
14.1 Go数据结构 每一个程序都在学习十八般武艺,学习语言.数据库.HTTP等技能. 而程序中的九阳神功就是数据结构与算,掌握了数据结构与算法,你的内功修炼就会有质的飞跃. 无论从事业务开发,测评 ...
- 3.10 Go Map哈希表
3.10 Go Map哈希表 map是key-value类型数据结构,读作(哈希表.字典),是一堆未排序的键值对集合. map是引用类型,使用make函数或者初始化表达式创建. map的key必须是支 ...
- fastDFS多线程并发执行出现的问题
--------------------- 原作者:Java高级开发 来源:CSDN 原文:https://blog.csdn.net/hang1995/article/details/7924 ...
- Spring 基于注解的配置 简介
基于注解的配置 从 Spring 2.5 开始就可以使用注解来配置依赖注入.而不是采用 XML 来描述一个 bean 连线,你可以使用相关类,方法或字段声明的注解,将 bean 配置移动到组件类本身. ...
- 【scrapy运行姿势】scrapy.cmdline.execute
scrapy.cmdline.execute scrapy的cmdline命令 1.启动爬虫的命令为:scrapy crawl (爬虫名) 2.还可以通过以下方式来启动爬虫 方法一:创建一个.py文件 ...
- Cube-UI组件中create-api 模块的基本使用
1.这个模块的功能是什么? 官方文档是这样解释的: 该模块默认暴露出一个 createAPI 函数,可以实现以 API 的形式调用自定义组件.并且既可以在 Vue 实例上下文中调用,也可以在普通 js ...