1. 前端实现动画的方式
javascript直接实现;
SVG(可伸缩矢量图形);
CSS3 transition;
CSS3 animation;
Canvas动画;
requestAnimationFrame;
2.常用的ES6的语法
1.var let const

2. 解构赋值

3.扩展运算符
leta=[1,2]console.log(...a)// 1,2// 添加新项console.log(...a,3)// 1,2,3相当于Array.contcat()也可以用于函数的参数,简化传参的写法
4.模块化 import , export
// a.jsleta=2export{a}// 解构赋值,相当于{a: 2}
// b.jsimport{a}form'a.js'console.log(a)// 2
5. 箭头函数基本形式
let func = (num) => num;
let func = () => num;
let sum = (num1,num2) => num1 + num2;
[1,2,3].map(x => x * x);
2. 箭头函数基本特点
(1). 箭头函数this为父作用域的this,不是调用时的this
箭头函数的this永远指向其父作用域,任何方法都改变不了,包括call,apply,bind。
普通函数的this指向调用它的那个对象。
3.深拷贝和浅拷贝的区别
深拷贝和浅拷贝最根本的区别在于是否真正获取一个对象的复制实体,而不是引用。
假设B复制了A,修改A的时候,看B是否发生变化:
如果B跟着也变了,说明是浅拷贝,拿人手短!(修改堆内存中的同一个值)
如果B没有改变,说明是深拷贝,自食其力!(修改堆内存中的不同的值)
浅拷贝(shallowCopy)只是增加了一个指针指向已存在的内存地址,
深拷贝(deepCopy)是增加了一个指针并且申请了一个新的内存,使这个增加的指针指向这个新的内存,
使用深拷贝的情况下,释放内存的时候不会因为出现浅拷贝时释放同一个内存的错误。
浅复制:仅仅是指向被复制的内存地址,如果原地址发生改变,那么浅复制出来的对象也会相应的改变。
深复制:在计算机中开辟一块新的内存地址用于存放复制的对象。
浅拷贝的实现方式
1. Object.assign()
letobj={username:'kobe'};
letobj2=Object.assign({},obj);
2. Array.prototype.concat()
letarr=[1,3,{username:'kobe'}];
letarr2=arr.concat();
a= [1,2,3]; b = {...a,3}
3. Array.prototype.slice()
深拷贝的实现方式
1. JSON.parse(JSON.stringify())
letarr=[1,3,{username:' kobe'}];
letarr4=JSON.parse(JSON.stringify(arr));
2.手写递归方法
3. 函数库lodash
4.跨域
5.url地址从放在浏览器上到显示出数据的过程
6. 作用域和作用域链
作用域:
最外层函数和在最外层函数外面定义的变量拥有全局作用域
作用域链:
在试图访问一个变量时JS引擎会从当前作用域开始向上查找直到Global全局作用域停止。
至于为什么叫链, 可以理解为和链表有相似之处, 深层的作用域会能够访问到上层作用域, 就如同链表中两个连续节点能够单向访问一样
7.闭包
指有权访问另一个函数作用域中的变量的函数。创建闭包的常见方式,就是在一个函数内部创建另一个函数。我理解其实是一个作用域(scope),而这个作用域就是闭包内部的函数可以访问和修改变量的范围
特性:- 函数嵌套函数 - 函数内部可以引用外部的参数和变量 - 参数和变量不会被垃圾回收机制回收
例子:闭包中局部变量是引用而非拷贝
8.原型和原型链继承
Js所有的函数都有一个prototype属性,这个属性引用了一个对象,即原型对象,也简称原型。这个函数包括构造函数和普通函数,我们讲的更多是构造函数的原型,但是也不能否定普通函数也有原型。
原型链:当从一个对象那里调取属性或方法时,如果该对象自身不存在这样的属性或方法,就会去自己关联的prototype对象那里寻找,如果prototype没有,就会去prototype关联的前辈prototype那里寻找,如果再没有则继续查找Prototype.Prototype引用的对象,依次类推,直到Prototype.….Prototype为undefined(Object的Prototype就是undefined)从而形成了所谓的“原型链”。