前端学习笔记

66 阅读1分钟

JavaScript,期望是一天一章

一.Js的实现

由三部分构成:1.核心(ECMAScript) 2.文档对象模型DOM(Document ObjectModel) 3.BOM(浏览器对象模型)

1.核心说白了就是JS语句

2.DOM就是html中的这种结构,用处是将整个前端界面抽象为分层的多节点树,便于开发者通过操作树中节点来达到控制界面的目的。

3.BOM用于控制浏览器中,除了当前界面外的其他地方。

四.变量,作用域,和内存

js的变量分为 原始值和**引用值。**感觉可以简单地理解为基本类型和对象的区别。也就是引用值在赋值时,赋值的是对应变量的地址。原始值是直接赋值。需要注意的是,在js中,字符串是原始值,也就是直接赋值的。而在java中,string被认为是一种对象,故实际上赋的为引用值。

和java一样,在函数操作中,参数是以值传递的形式传入(对象传递的为地址)

上下文

js通过上下文决定函数/变量可以访问哪些数据,每个上下文关联了一个对象,对象存储了所有该上下文中定义的变量和函数。最外层的上下文自然是全局上下文,而当函数被调用时,会生成一个对应的调用上下文,并放入调用栈中,调用完成后弹出,回退到上一上下文。

变量声明:

 var声明变量 -变量会被添加到最近的上下文中

 不声明变量-变量会被添加到全局上下文中

let声明变量:作用域为块级。块级---》最近的一对花括号{}界定。---〉适合用于for定义,var定义会从for循环中透出。

const用于声明常量。

搜索变量的标识符时,会沿着作用域链,从局部作用域一直向上搜索,直到搜索完全局上下文也没搜索到。

GC

和java相同,js也是一个需要gc的语言。一般使用标记清除法进行gc,当变量进入上下文后,进行标记。

内存管理:js一般运行在浏览器下,与传统服务器相比,分配给浏览器的内存一般较少。因此为了避免频繁gc,让内存占用量保存在一个较小的值能够提供页面的性能。主要方法有:1.解除引用,当不再使用变量时,赋值为null,让其从上下文中排出,在下次gc时就能回收到。2.通过const和let提升性能。这两以块作为作用域,所以相比var,能够更快地被gc3.减少gc的次数,间接控制gc的条件,浏览器通过对象的迭代速度来决定什么时候gc,当一次大量对象的创建,会让浏览器更加容易gc。因此,使用复用的方式,如对象池等,避免频繁创建和销毁对象,能够减少gc的次数。

引用类型: js中 number , string , boolean 类型是一个引用值,在不显示创建对象时,不会进行对象的创建。而当以读模式/对这种引用类型进行对象操作时。会在后台根据引用值实例化一个对象进行操作,操作完成后销毁对象。而当进行显示对象操作时,需要注意,js中对于对象类型在表达式中,返回的是true。也就是 Boolean(false)对象实际使用表达式时返回的是false。因此大部分场景下应该使用boolean引用值而不是对象。

 js中还存在一个全局内置对象Global,所有全局变量和函数都是Global的属性和方法。