JavaScript学习小结

Stella981
• 阅读 794

JavaScirpt变量可用来保存两种类型值:基本类型值,引用类型值
基本类型值:Undefined,Null,Boolean,Number,String

基本类型及引用类型值特点:

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

关于执行环境:

1.执行环境有全局执行环境和函数执行环境之分;
2.每次进入一个新执行环境,都会创建一个用于搜索变量和函数的作用域链;
3.函数的局部环境不仅有权访问函数作用域中的变量,而且有权访问其包含(父)环境,乃至全局环境;
4.全局环境只能访问在全局环境候中定义的变量和函数,而不能直接访问局部环境候总的任何数据;
5.变量的执行环境有助于确定应该何时释放内存。

垃圾收集

1.离开作用域的值将被自动标记为可回收,因此将在垃圾收集期间被删除;
2.”标记清除”
3.引用计数
4.当代码中出现循环引用现象时,引用计数算法则会导致问题;
5.解除变量引用不仅有助于消除循环引用现象,而且有利于垃圾收集。

函数表达式:

1.函数声明并非函数表达式,函数声明要求有名字,但是函数表达式并不需要,没有名字的函数表达式叫做匿名函数;
2.在无法确定如何引用函数的情况下,递归函数就会变得复杂,而且递归函数的性能并不高;
3.递归函数应始终使用arguments.callee来递归调用自身,不要使用函数名,因为函数名可能会发生变化。

在函数内部定义了其他函数时,就创建了闭包,闭包有权访问包含函数内部的全部变量:

1.在后台执行环境中,闭包的作用连包含着她它自己的作用域、包含函数的作用域和全局作用域;
2.通常函数的作用域及其所有变量都会在函数执行结束后被销毁;
3.但是,当函数返回了一个闭包是,这个函数的作用域将会一直在内存中保存到闭包不存在为止。

使用闭包可以在javascript中创建块级作用域:

1.创建并立即调用一个函数,这样既可以执行其中的代码,又不会在内存中留下对该函数的引用;
2.结果就是函数内部的所有变量都会被立即销毁,除非将某些变量赋值给了包含作用域中的变量。

闭包还可以用于在对象中创建私有变量:

注意:因为创建闭包必须维护额外的作用域,所以过度使用它们可能会占用大量内存。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
LinMeng LinMeng
3年前
js之传值与传址/undefined和null/严格模式
传值与传址基本数据类型有五种Undefined、Null、Boolean、Number和String引用数据类型有两种object,array,fn两种数据类型的区别:1.存储位置不同原始数据类型直接存储在栈(stack)中简单数据段,占据空间小,大小固定,属于被频繁使用的数据,所以存储在栈中;引用数据类型直接存
待兔 待兔
3年前
[Dart]Dart语言之旅<二>:变量
变量以下是创建变量并为其分配值的示例:varname'Bob';变量是引用。名为name的变量包含对值为“Bob”的String类型的对象的引用。默认值未初始化的变量的初始值为null。即使是数字类型的变量,初始值也为null,因为数字也是对象。intlineCount;assert(lineCountnull)
Kevin501 Kevin501
3年前
Go语言中new()和make()的区别
1.Go语言中的值类型和引用类型值类型:int,float,bool,string,struct和数组(数组要特别注意,别搞混了)变量直接存储值,分配栈区的内存空间,这些变量所占据的空间在函数被调用完后会自动释放。引用类型:slice,map,chan和值类型对应的指针变量存储的是一个地址(或者理解为指针),指针指向内存中真
Wesley13 Wesley13
3年前
Java对象的浅拷贝和深拷贝&&String类型的赋值
Java中的数据类型分为基本数据类型和引用数据类型。对于这两种数据类型,在进行赋值操作、方法传参或返回值时,会有值传递和引用(地址)传递的差别。浅拷贝(ShallowCopy):①对于数据类型是基本数据类型的成员变量,浅拷贝会直接进行值传递,也就是将该属性值复制一份给新的对象。因为是两份不同的数据,所以对其中一个对象的该成员变量值进行修改,
Stella981 Stella981
3年前
JVM调优总结一
数据类型   Java虚拟机中,数据类型可以分为两类:基本类型和引用类型。基本类型的变量保存原始值,即:他代表的值就是数值本身;而引用类型的变量保存引用值。“引用值”代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置。基本类型包括:byte,short,int,long,cha
Easter79 Easter79
3年前
Swift3.0 类和结构体的选择
结构体实例总是通过值传递,类实例总是通过引用传递先说说值类型和引用类型的区别值类型被赋予给一个变量、常量或者被传递给一个函数的时候,其值会被拷贝在Swift中,所有的结构体和枚举类型都是值类型。这意味着它们的实例,以及实例中所包含的任何值类型属性,在代码中传递的时候都会被复制。引用类型在被赋予到一个变量、常
Stella981 Stella981
3年前
JVM调优总结(一)基本概念
数据类型Java虚拟机中,数据类型可以分为两类:基本类型和引用类型。    基本类型:保存原始值,即:他代表的值就是数值本身;    引用类型:保存引用值。“引用值”代表了某个对象的引用,而不是对象本身,对象本身存放在这个引