事件委托
1.利用事件冒泡的原理,把子类的事件绑到父类上面
盒子模型
盒子模型是HTML元素的矩形容器,从外到内,是由外边距,边框,内边框和内容组成的模型,可以通过三个属性来控制盒子的三个部分。而content是HTML元素的内容。
怪异盒模型就是,宽和高要包括外边距和边框。
上下文(this的指向问题)
在js代码执行中,要进行代码预编译,这个时候就会创建执行上下文,执行上下文分为三种,
全局上下文: 只有一个,浏览器的全局对象window,this的指向全局
函数上下文:无数个,当函数执行的时候被创建的,this指向调用这个函数的对象
react组件传值
父传子:通过props进行传值,子组件通过this.props进行接收
子传父:传值的话:回调函数, 先在父组件上定义一个方法,然后在子组件里去调用这个方法,要传的数据以参数的形式传出去,然后在父组件接收。
通过ref拿到子组件的实例对象,然后把this传给父组件,父组件就可以用this.ref来使用子组件的方法了
兄弟组件传值:redux,或者通过共同的父组件 作为中转,先传给父组件,然后再传给兄弟组件
响应式和自适应的区别
响应式布局:不同分辨率和屏幕尺寸上,页面展示方式不同。通过媒体查询来实现。
自适应:根据不同的设备,加载不同的样式;使用场景:对于需要不同的布局方式,展现形式的样式。
重绘和回流
重绘:元素的一些属性,比如背景颜色等不会影响布局的变化而要重新渲染页面,这就叫重绘。
回流:也叫重排,render树的一些大小边框发生改变,需要重建,就叫重绘
判断数组的方法
let arr = [1,2,3]
1.Array.isArray(arr)
2.constructor
arr.constructor == array
事件触发(触发机制)有三个阶段
1.捕获阶段:window向事件触发处传播,捕获阶段不会响应任何事件
2.目标阶段:传播到事件触发处 触发注册的事件
3.冒泡阶段:从事件触发处向window传播,遇到冒泡事件会触发
事件代理(事件委托)
如果子节点是动态生成的,那么子节点的响应事件就应该写在父节点上面,利用事件冒泡的原理
优点:防止占用过多的内存,不用注销子节点上面的事件
http协议
一种无状态的超文本传输协议,是浏览器端和服务器端互相通信的一种规则,交换信息的基础。什么是无状态,客户端发请求,服务器端响应数据,连接结束。两者之间不需要建立持久的连接。服务器端不保留客户端的相关信息,服务器端不能主动给客户端发送数据。
什么是跨域?为什么浏览器要使用同源策略?你有几种方式可以解决跨域问题?了解预检请求嘛?
跨域:请求URL 与当前页面的URL的http协议,域名,端口号有一个不一样就是跨域。浏览器出于对安全的考虑,Ajax请求就会失败
同源策略:那就是三者必须相同。才能成功发起请求
为什么会有安全机制?防止一些人利用客户端是登录状态,就胡乱发送恶意请求
请求跨域了,请求发出去了没有?
答:请求发出去了,服务器也响应数据了,但是浏览器这边给拦截下来了,跨域就是阻止用户读取到其他域名的内容
常见的跨域问题:
jsonP跨域:
利用script标签没有跨域限制的漏洞,向script标签的src属性指定一个需要访问的地址,然后在用一个script标签里面写一个回调函数,进行接收数据,使用简单,兼容性不错,但是只限于get请求。
CORS跨域:
需要前后端同时支持
XSS攻击
1.XSS:跨站脚本,当目标网站目标用户浏览器渲染HTML文档的时候,出现不被预期的脚本并执行。这就是XSS攻击。
主要注意4点:目标网站目标用户, 浏览器,不被预期,脚本。
问题:
1.安全问题,盗取cookie。
2.恶意篡改用户数据,嫁祸,删除目标文章
js动画css动画css3动画之间的差异
1.js代码相对复杂一点,而且对动画的控制上比较灵活,兼容性好,可以让动画暂停,取消,终止,css动画不能添加事件
2.动画性能方面:js动画多了一个js解析过程,所以性能方面没有css的好,css3可以在低版本浏览器中自然降级
promise的核心原理:
发布订阅模式(发布者存在一个数组来用于登记订阅者及异步执行的函数,订阅的异步函数都会执行)通过两个队列来缓存,成功回调函数和失败回调函数