闭包的理解
(1)、闭包的概念: 简单理解就是定义在一个函数内部的函数,内部函数持有外部函数内变量的引用;
(2)、闭包的优点:
1)、读取函数内部的变量;2)、方便调用上下文的局部变量,利于函数封装;
(3)、闭包的缺点:
1)、由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所有已不能滥用闭包,否则会造成网页性能的问题,在 IE 中可能导致内存泄漏的问题;解决的办法是,在退出之前,将不使用的局部变量全部删掉;
2)、闭包会在父函数外部,改变父函数内部变量的值;
new 一个对象的过程中发生了什么?
(1)、创建一个空对象;
(2)、设置新对象的 constructor 属性为构造函数的名称,设置新对象的 __proto__属性指向构造杉树的 prototype;
(3)、使用新对象调用函数,函数中的 this 被指向新实例对象;
(4)、将初始化完毕的新对象地址,保存到等号左边的变量中;
js 原型和原型链
简单的来讲,原型其实就是对象Object或者引用类型的 prototype 属性;当我们访问一个对象的属性的时候,如果对象里没有这个属性的时候,那么他就回去 prototype 中去寻找,如果 prototype 中没有的话,就会接着再 prototype 中的 prototype 中去寻找,这个寻找的链路就是原型链;
javaScript 的对象是通过引用类型来传递的,我们创建的每个新对象实体中并没有一份属于自己的原型副本,当我们修改原型时,与之相关的对象也会继承这一改变;当我们需要获取一个属性的值的时候,javaScript 引擎会先在当前对象中寻找,如果找不到的话就会去的 prototype 中寻找,并逐级递推;
set 数据结构
set 是 es6 中新添加的数据结构,类似于伪数组,但是这种结构中的所有成员都是唯一的;可以通过 Affay.from 转换成真是的数组;
set 结构虽然是一种类似数组的结构数据,但是要想获取它的长度,不能使用 length 属性,要用 size 属性;
除了 size 属性外,set 数据还具有 keys、values、entries、forEach 方法;而且还具有 add、has、delete、clear 等方法;
add:添加某个值,返回 Set 结构本身;
has:返回一个布尔值,检测是否是 Set 数据的成员;
delete:删除某个值,返回一个布尔值,表示删除是否成功;
clear:清除所有的成员,没有返回值;
map 数据结构
map 数据结构是 es6 新增的 key--value 类型的数据结构;其中的 key 和 value 可以是任意的值;
在 javaScript 中 NaN != NaN ;但是在 map 数据结构中,如果 键是 NaN 的话,则多个 NaN 指向的同一个键;
map 数据的创建:
方法一: let map = new Map() map.set('a', 1)
方法二:let map = new Map([['a', 1]])
同样的要想获取 map 数据结构的键的长度是不能用 length 属性的,要用 size 属性;
map 结构数据具有的方法:clear、delete、entries、get、keys、has、set、values、forEach;
需要注意的是 map 结构并不是一种真实的对象,并不能通过 obj.key 去拿到键值,
map 和 对象的对比:
1)、通常对象都是有自己的原型的,但是 es5 开始可以通过 Object.create(null) 来创建一个没有原型的对象;
2)、对象的键只能是字符串或者 symboles;但是 map 结构数据的键可以是任意值;
3)、map 结构的数据可以通过 size 来获取键的个数,但是对象只能通过遍历去计算获取;
import && require 的区别
require 的基本语法:在导出的文件中定义 module.export ,导出的对象的类型不予限制,可以是任何类型:对象,字符串,变量,方法等;在引入的文件中调用 require() 方法引入对象即可;
import 的基本语法:导出的对象必须与模块中的值一一对应,也就是导出的对象与整个模块进行结构赋值;
import 和 require 的区别:
1)、require 是赋值过程并且是运行时才执行,import 是结构过程并且是编译时执行,require 可以认为是一个全局的方法,所以它设置可以进行一些运算操作,import 必须写在文件的顶部;
2)、require 的性能相对于 import 稍微低一点,因为 require 是在运行的时候才引入模块并且还赋值给某个变量,而 import 只需要依赖 import 中的接口在编译时引入指定模块所以性能稍微高点;
3)、在 commom.js 中 module.export 之后,导出的值就不在发生改变了,但是在 es6 的 export 中是可以的;
清理缓存的方法
1)、meta 方法
<meta http-equiv='pragma' content='no-cache'>
<meta http-equiv='cache -control' content='no-cache, must-revalidate'>
<meta http-equiv='expires' content='0'>
2)、清理 form 表单的临时缓存
<body onLoad='javascript: document.formname.reset()'>
3)、用 http head 清理,比如 expires 和 cache-control