1.定义变量的几种方式分别是什么?有什么区别?
答:var:是 ECMAScript6 版本以前一直使用的方式,由于这种方式 声明的变量在某些情况下会导致一些问题 let:let是块级作用域,函数内部使用let定义后,对函数外部无影响,值可以改变. const:值不能改变.
2.flex布局主轴有哪几种排列方法?
(1) flex-start:项目靠近父盒子的左侧
(2) flex-end:项目靠近父盒子的右侧
(3) center : 居中显示
(4) space-evenly:沿主轴方向均匀分布
(5) space-between:子元素紧贴父容器的首尾两侧。
3.浅拷贝和深拷贝的区别?
浅拷贝是指只复制一层对象,当对象的属性是引用类型时,实质复制的是其引用,当引用指向的值改变时也会跟着变化 深拷贝就是复制了目标的所有层级
可以理解为浅拷贝只是复制了网页的链接,而深拷贝则是将网页的代码拷贝下来重新写了一个网页.
所以当原目标发生改变时,浅拷贝会随之变化,深拷贝不会.
4.防抖和节流的区别?如何实现防抖和节流?
区别:防抖是将多次执行变为只执行最后一次,节流是将多次执行变成每隔一段时间执行.
防抖实现方式:每次触发事件时设置一个延迟调用方法,并且取消之前的延时调用方法.
节流实现方法:每次触发事件时,如果当前有等待执行的延时函数,则直接return.
5.什么是跨域?跨域的解决方法?
请求一个url时,协议,域名,端口三者之间任意一个与当前页面1的url不同则为跨域,反之叫同源.
解决跨域的有cors,jsonp.jsonp只针对get请求.
6.图片懒加载的原理?
优先加载可视区域的内容,其他部分等进入可视区域在加载,从而提高性能.
7.构造函数,原型函数,对象实例之间是怎样查询的?
每创建一个函数,该函数都会自动带有一个prototype属性,该属性指向一个对象,称之为原型对象;原型对象上默认有一个属性constructor,指向其相关联的构造函数.通过调用构造函数产生的实例对象,都拥有一个内部属性,指向了原型对象,其实例对象能够访问原型对象上的所有属性和方法.
8.三元表达式的用法是什么?
条件表达式?true的表达式 :false的表达式.
9.在node.js中如何拼接路径字符串?
使用path.join方法.也可以使用'+'进行拼接.
10.改变this指向的3种方法?以及区别?
1.call(),apply(),bind().
11.说出迭代遍历数组,筛选数组,查找数组中是否有满足条件的元素这三种方法?
forEach(),filter(),some()
12.说出闭包的定义及作用
定义:只有权访问另一个函数作用域中变量的函数.
作用:延长局部变量的生命周期,延伸局部变量的作用范围.