前端- JavaScript的那些知识点(二)
怎么改变this的指向呢?
1、使用es6箭头函数
2、在函数内部定义引用that = this
3、apply、call、bind
4、new实例化一个对象
call、apply、bind的区别?
call、apply他们两个的第一个参数都是一样的表示要改变指向的对象,第二个参数call是以逗号隔开,apply是数组的形式
bind是返回一个函数
深浅拷贝之数据类型
基本类型: undefined、null、Boolean、String、Number、Symbol、在内存中大小固定、保存在栈内存中、基本数据类型的复制就是创建了一个新的副本,改变值旧对象不会改变。
引用类型: Object、Array、Date、Function等引用类型的值是对象,保存在堆内存中, 而栈内存存储的是对象的变量标识符和对象的储存地址
深浅拷贝之实现方式
浅拷贝:仅仅复制了引用,会影响原来的值,只能拷贝一层,slice、concat、obj.assign。
深拷贝:在堆中重新创建内存,不同的地址,不同的值,互不影响,可以层层拷贝,json.string、json.parse
settimeout和setinterval的区别
js是单线程的、浏览器遇到settimeout和setinterval会先把他们推入浏览器的待执行时间队列里边,然后向下执行代码,代码执行完之后去看事件队列里边有没有任务,有的话就执行
前端跨域问题
同源策略:协议、域名、端口号要相同
1、jsonp:只能解决get。原理:动态创建一个script标签,利用script的src和herf都不受同源策略的限制去请求第三方度服务器的资源内容。地址后边问号然后生命一个函数用来本地接受
2、document.domain基础域名相同,子域名不同
3、window.name利用在一个浏览器窗口内,载入所有的域名都是共享一个window.name
4、服务端设置HTTP响应头Access-Control-Allow-Origin
5、H5新特性window.postMessage(data,url)
函数的防抖和节流:都是为解决高频事件而来
防抖:短时间内多次触发同一个事件,只执行开头或者最后的一次
节流:节流是连续触发事件的过程中在一定的时间内间隔执行函数,会稀释频率,比如每隔一秒执行一次,无论这一秒钟触发了多少次
作者:盖了帽了
链接:https://juejin.cn/post/7027747682059812901