let声明变量,没有变量提升
let是一个块级作用域
let不能重复声明
const声明常量,一旦被声明,无法改变
应用场景Set用于数据重组,Map用于数据储存
Set:
(1)成员不能重复
(2)只有键值没有键名,类似数组
(3)可以遍历,方法有add, delete,has
Map:
(1)本质上是健值对的集合,类似集合
(2)可以遍历,可以跟各种数据格式转换
什么是对象的浅拷贝?
将原对象或原数组的引用直接赋给新对象,新数组,新对象/数组只是原对象的一个引用
简单的理解就是拷贝了对象的第一层属性,如果对象的某个属性还有第二层,第三层的数据,浅拷贝是访问不到的。比如说某个属性的值是对象,那浅拷贝无法复制该对象的数据。
浅拷贝怎么使用?
btn() { this.list.push( this.copy(this.stu) ) }, copy(obj) { let newObj = {} for(let i in obj) { console.log(obj[i]) newObj[i] = obj[i] } return newObj; }
什么是对象的深拷贝?
创建一个新的对象和数组,将原对象的各项属性的值拷贝过来,是“值”而不是“引用”
深拷贝怎么使用?
作者也不会
用户触发事件过于频繁,只要最后一次事件的操作
let t = null; inp.oninput = function(){ if(t !== null){ clearTimeout(t) } t = setTimeout(()=>{ console.log(this.value) },500) }
用户触发事件过于频繁,控制执行次数
let flag = true window.onscroll = function() { if(flag) { setTimeout(() => { console.log(123) flag = true },500) } flag = false }
使用闭包主要是为了设计私有的方法和变量。闭包的优点是可以避免全局变量的污染,缺点是闭包会常驻内存,会增大内存使用量,使用不当很容易造成内存泄露。
闭包有三个特性:
1.函数嵌套函数
2.函数内部可以引用外部的参数和变量
3.参数和变量不会被垃圾回收机制回收
每一个对象都有它的原型对象,它可以使用自己原型对象上的属性和方法
1.通过对象的__proto__获取
2.通过构造函数的prototype获取
让子类拥有父类的资源
把任何的数据和行为抽象成一个形象的对象是面向对象。
面向对象主要有三大特性
继承:子级继承父级属性和方法
封装:封装一个方法function 放到一个对象里面去
多态:重载:根据传递参数的不同展现不同的形态,重写:子级继承父级属性和方法,感觉不好用,自己在进行重写。