一、Web端
https://www.nowcoder.com/discuss/588372
1.float如何清除浮动
(1)父元素上加上overflow:auto/hidden。
(2)父元素加一个伪元素 .father:after{content: '', clear: both}
2.闭包的原理及作用
(1)闭包是通过JS的链式作用域,函数内的局部变量只有内部函数能访问到,所以要对外暴露一个函数内部的局部变量时,就会用到闭包。
(2)一般用于页面内的计时器和计数器
a)计时器的使用场景是函数防抖,当频繁触发计时器时,可以把计时器放到函数内,计时器的创建和销毁都通过闭包的形式对外暴露,这样可以在频繁调用计时器时,做到函数防抖。同时保持全局清洁,不会被其他函数的调用破坏计时器的逻辑。
b)计数器是把作为累加的变量保存在一个函数内,同时通过闭包完成累加和对外暴露,以此保证全局清洁,以及计时器的安全性。
3.跨域访问如何解决
由于JavaScript的同源策略,A域名下的Javascript不能操作B,C域名下的对象。
协议不同,域名不同,端口号不同。
(1)跨域资源共享 CORS
后端在response header中添加【Access-Control-Allow-Origin:origin的地址/*】允许跨域。
(2)使用jsonp,生成script标签,但只能是GET请求。axios?
4.万能居中
(1)display: flex; justify-content: center; align-items: center;
(2)margin:0;
(3)top: 50%; translateY: -50%;
(4)line-height: 100%;
(5)text-align: center;
5.vue/angular中的指令是什么
a)vue
(1)除了默认设置的核心指令( v-model 和 v-show ), Vue 也允许注册自定义指令。
(2)vue指令可以定义为全局的或者局部的。
全局:
Vue.directive('self_defined_name',{ bind:function(el,binding){ //do someting }, inserted: function(el,binding){ //do something },}
局部:
new Vue({ el:'#app', directives:{ self_defined_name1:{ bind:function(el,binding){ //do something } inserted:function(el,binding){ //do something }, } self_defined_name2:{ bind:function(el,binding){ //do something } inserted:function(el,binding){ //do something }, } }})
(3)钩子函数:bind inserted update componentUpdated unbind
(4)钩子函数参数:el binding对象(name value oldValue expression arg modifiers) vnode oldVnode(仅在update componentUpdated中使用)
b)angular
(1)angular的指令分为组件,结构型指令和属性型指令
(2)组件继承于directive,所以组件也属于指令
(3)属性型指令可以使用ng g d 文件名,来在前端工程中生成一个指令控制器文件。文件中需要使用修饰器@Directive+选择器,来指定指令的name。在@Input中,获取传递给指令的参数。在构造函数construction会返回el,通过el.nativeElement来获取指令所在的元素。
(4)结构型指令,在构造函数中会返回TemplateRef和ViewContainer,TemplateRef表示内嵌的template模板元素,ViewContainer是视图容器,可以通过ViewContainer的createEmbeddedView或者clear方法来控制内嵌的template模板元素是否显示。
(5)指令与组件共有的钩子
1) ngOnChanges - 当数据绑定输入属性的值发生变化时调用
2) ngOnInit - 在第一次 ngOnChanges 后调用
3) ngDoCheck - 自定义的方法,用于检测和处理值的改变
4) ngAfterContentInit - 在组件内容初始化之后调用
5) ngAfterContentChecked - 组件每次检查内容时调用
6) ngAfterViewInit - 组件相应的视图初始化之后调用
7) ngAfterViewChecked - 组件每次检查视图时调用
8) ngOnDestroy - 指令销毁前调用
6.webpack和gulp的相同点和不同点
(1)webpack和gulp都是前端工程化工具
(2)webpack是打包工具,gulp是构建工具
7.flex - 弹性布局
(1)flex-direction:设置主轴方向,默认水平
(2)flex-warp:是否换行
(3)justify-content:主轴位置 flex-start center flex-end space-between space-around
(4)align-items:交叉轴位置 flex-start center flex-end baseline stretch
(5)align-content: 多根轴线的对齐方式 flex-start center flex-end space-around space-between stretch
b) 设置在项目上的6个属性
(1)order
(2)flex-grow
(3)flex-shrink
(4)flex-basis
(5)flex
(6)align-self
8.css相关,动画
9.ES6有哪些新功能
https://segmentfault.com/a/1190000016068235
(1)新增let和const。let不支持变量提升,const在声明时必须被赋值
(2)模板字符串
`This demonstrates the output of HTML content to the page,
including student's ${name}, ${seatNumber}, ${sex} and so on.`
(3)箭头函数,省略声明函数时的function,参数括号,return
(4)设置函数默认值,function printText(text='default')
(5)对象解构 const{name,age,sex}=student;
(6)for...of 用于遍历一个迭代器;for...in 用来遍历对象中的属性
10.Promise的用法
11.async和await的用法
12.map,filter,each等的用法,是否返回新数组
参考链接:https://www.cnblogs.com/jiangweichen88/p/10509054.html
(1)concat (返回新数组)
(2)join(返回字符串,逗号分隔)
(3)push(返回数组新长度,改变原数组)
(4)pop(返回去掉的最后一个元素,改变原数组)
(5)shift(返回去掉的第一个元素,改变原数组)
(6)unshift(返回新增的第一个元素,改变原数组)
(7)slice(返回新数组,指定下标start至end(不包括该元素))
(8)splice(返回被删除的数组,改变原数组)
(9)substr, substring(两个参数,substr第二个参数是留多少个字符;substring含头不含尾)
(10)sort(),按照 Unicode code 位置排序,默认升序,返回新数组
(11)reverse()方法用于颠倒数组中元素的顺序。返回的是颠倒后的数组,会改变原数组
(12)indexOf 和 lastIndexOf
(13)every(返回true/false)
(14)some(返回true/false)
(15)filter(返回新数组)
(16)map(返回新数组)
(17)forEach(方法)
ES6:
(1)find
(2)findIndex
(3)fill
(4)copyWithin
(5)from
(6)of
(7)entries
(8)values
(9)keys
(10)includes
13.vue双向数据绑定原理
vue双向数据绑定是用到了数据劫持和发布-订阅者模式
(1)Object.defineProperty(object, key, {setter(), getter()})
(2)
14.虚拟DOM?
15.lodash
16.rxjs
17.响应式编程
18.性能优化
(1)尽量把写在上面,