1.concat()可以用于连接两个或多个数组
a.concat(4,5)
[].concat(a,b)
返回新数组
2.reduce
reduce是默认返回prev的 所以不用renturn也可以 但是你写return的值了那就返回你写的值 除非你return的是无效值 null undefined之类
也可以用箭头函数 更优雅
let sum=0
let arr=[1,2,3]
arr.reduce(function(prev,item){
prev=prev+item
},0)
数组降维也可以用reduce
arr.flat(Infinity)
let ans=function(arr){
return arr.reduce((prev,item)=>{
return prev.concat(Array.isArray(item)?ans(item):item)},[]);
}
ans(arr)
-谁直接调用产生this指针的函数,这函数里的this指针就指向谁
-react文档
https://github.com/xzlaptt/React
3.token加密
https://blog.csdn.net/AwayFuture/article/details/102753627
4.display:none并不会被渲染到布局树上 但是dom树上还存在不然万一对他display显示了呢 他的子元素也不会出现在页面 而且就算子元素设置为display:block也没用 因为子元素根本没加载到页面上
visibility:hidden产生了box影响布局但是看不见, 产生box,完全透明不可见但是子元素如果设置visibility:visible元素可见的话是会显示的 毕竟在dom树上,布局树上也有
5.webpack
webpack是一个打包模块化js的工具,在webpack里一切文件皆模块,通过loader转换文件,通过plugin注入钩子,最后输出由多个模块组合成的文件,webpack专注构建模块化项目。WebPack可以看做是模块的打包机器:它做的事情是,分析你的项目结构,找到js模块以及其它的一些浏览器不能直接运行的拓展语言,例如:Scss,TS等,并将其打包为合适的格式以供浏览器使用。
第二题:说说webpack与grunt、gulp的不同?
三者都是前端构建工具,grunt和gulp在早期比较流行,现在webpack相对来说比较主流,不过一些轻量化的任务还是会用gulp来处理,比如单独打包CSS文件等。
grunt和gulp是基于任务和流(Task、Stream)的。类似jQuery,找到一个(或一类)文件,对其做一系列链式操作,更新流上的数据, 整条链式操作构成了一个任务,多个任务就构成了整个web的构建流程。
webpack是基于入口的。webpack会自动地递归解析入口所需要加载的所有资源文件,然后用不同的Loader来处理不同的文件,用Plugin来扩展webpack功能。
所以,从构建思路来说,gulp和grunt需要开发者将整个前端构建过程拆分成多个`Task`,并合理控制所有`Task`的调用关系;webpack需要开发者找到入口,并需要清楚对于不同的资源应该使用什么Loader做何种解析和加工
对于知识背景来说,gulp更像后端开发者的思路,需要对于整个流程了如指掌 webpack更倾向于前端开发者的思路
第三题:什么是bundle,什么是chunk,什么是module?
bundle:是由webpack打包出来的文件
chunk:代码块,一个chunk由多个模块组合而成,用于代码的合并和分割
module:是开发中的单个模块,在webpack的世界,一切皆模块,一个模块对应一个文件,webpack会从配置的entry中递归开始找出所有依赖的模块
第四题:什么是Loader?什么是Plugin?
1)Loaders是用来告诉webpack如何转化处理某一类型的文件,并且引入到打包出的文件中
2)Plugin是用来自定义webpack打包过程的方式,一个插件是含有apply方法的一个对象,通过这个方法可以参与到整个webpack打包的各个流程(生命周期)。
第五题:有哪些常见的Loader?他们是解决什么问题的?
file-loader:把文件输出到一个文件夹中,在代码中通过相对 URL 去引用输出的文件
url-loader:和 file-loader 类似,但是能在文件很小的情况下以 base64 的方式把文件内容注入到代码中去
source-map-loader:加载额外的 Source Map 文件,以方便断点调试
image-loader:加载并且压缩图片文件
babel-loader:把 ES6 转换成 ES5
css-loader:加载 CSS,支持模块化、压缩、文件导入等特性
style-loader:把 CSS 代码注入到 JavaScript 中,通过 DOM 操作去加载 CSS。
eslint-loader:通过 ESLint 检查 JavaScript 代码
5vue的双向绑定 {
} 6.微信小程序 进入页面图片渲染会拉伸闪下变形
把image的mode图片裁剪缩放模式用mode="widthFix"也就是保持宽高比不变 宽度不变高度自动变化
<image src='...' style='width:98%;height:auto' mode='widthFix'></image>
css里面加上height:auto
https://blog.csdn.net/Fundebug/article/details/83176638?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0.essearch_pc_relevant&spm=1001.2101.3001.4242
8.this
因为this在定时器和setinterval中常见this都是指向window
所以我们经常需要再外层先保存this为that然后再回调函数(比如定时器)中使用该变量,而不是直接使用this
或者用bind()
fn: function () {
5 var timer = null;
6 clearInterval(timer);
7 timer = setInterval(function () {
8 console.log(this.name); //my name is obj
9 }.bind(this), 1000)
}
因为bind不是立即执行他是返回一个函数 等待1s之后他才会回调函数执行 所以用bind 而不是call apply等立即执行函数 否则就失去了定时器的作用
或者就用箭头函数 爽歪歪 箭头函数this就是外层this
(定时器的回调函数用箭头) 回调函数是用到了才执行并不是立即执行的函数 回调回调 我用到了才自动调用
回调函数不是我自己钓的 是别人哦
- git原理:工作区=》暂存区=》本地仓库=》远程仓库 blog.csdn.net/xiaoputao09…
8.v-show用于比较频繁的 v-if用于比较固定不怎么变的
(1)手段:
v-if是动态的向DOM树内添加或者删除DOM元素;
v-show是通过设置DOM元素的display样式属性控制显隐;
(2)编译过程:
v-if切换有一个局部编译/卸载的过程,切换过程中合适地销毁和重建内部的事件监听和子组件;
v-show只是简单的基于css切换;
(3)编译条件:
v-if是惰性的,如果初始条件为假,则什么也不做;只有在条件第一次变为真时才开始局部编译(编译被缓存?编译被缓存后,然后再切换的时候进行局部卸载);
v-show是在任何条件下(首次条件是否为真)都被编译,然后被缓存,而且DOM元素保留;
(4)性能消耗:
v-if有更高的切换消耗;
v-show有更高的初始渲染消耗;
(5)使用场景:
v-if适合运营条件不大可能改变;
v-show适合频繁切换。
10.dns解析
输入百度网址之后 系统会检查本地hosts文件是否存在域名映射 不存在的话去找本地dns缓存 否则去本地dns服务器
此时注意其实百度网址也是一个小主机地址 所以我们应该是先从大范围开始找的 然后再慢慢减少范围
所以我们本地dns服务器会把请求发到根dns服务器,根dns服务器(不是最顶端吧)收到请求后返回一个负责该顶级域名服务器的ip 然后再逐层请求直到找到百度主机
根服务器主要用来管理互联网的主目录,全世界只有13台。
毕竟大人知道的多 而且就这几层 别的领导可能不是负责这个区域的 我只能去找根服务器咯
没你想的前几层跨度那么小 其实前几层跨度挺大的
本地dns服务器一般是运营商那边了
https://www.jianshu.com/p/918892fa2da2
观察者模式是观察者和被观察者直接联系 松耦合
一对多的依赖关系
当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 具体使用场景不同吧
https://www.runoob.com/design-pattern/observer-pattern.html
发布订阅有中间者参与 所以发布者和订阅者没有耦合关系
所以没有上面所说的依赖关系
https://zhuanlan.zhihu.com/p/51357583
评论有意思
vue双向绑定是发布订阅模式 不是观察者模式
而且他有compier因为毕竟是实现 所以一定会有编译模板渲染功能的 我毕竟是实现功能 比较底层的
12.异步
音乐播放器
https://github.com/webjuzi/vue-music
vue中data是一个函数是为了重用 如果是一个对象那组件之间不就共享了