欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

前端面试题

程序员文章站 2024-03-24 18:20:04
...

js部分

js据类型

基本数据类型:String,Number,Boolean,Null,undefined

split() join() 的区别

前者是将字符串切割成数组的形式,后者是将数组转换成字符串

.Event Loop & 宏任务微任务

JavaScript是单线程语言,单线程意味着所有任务需要排队执行,可将任务分为同步任务和异步任务两种。

同步任务是指在主线程上排队执行的任务,只有前一个任务执行完毕才能执行后一个任务;异步任务是指不进入主线程而进入任务队列的任务,只有任务队列通知主线程某个异步任务可执行,该任务才会进入主线程执行。异步任务必须指定回调函数,当主线程开始执行异步任务,就是执行对应的回调函数。它们的具体运行机制为:
1.所有同步任务都在主线程上执行,形成一个执行栈;
2.还存在一个任务队列,只要异步任务有了结果,就在任务队列中放置一个事件;
3.当执行栈所有同步任务完成,系统就会读取任务队列,将事件对应的异步任务加入执行栈执行。这个过程是循环不断的,所以整个运行机制称为Event Loop(事件循环)。任务又能进一步细分为宏任务和微任务,宏任务如主代码块,setTimeout等,微任务如Promise等。每执行一个宏任务后,会执行完所有微任务,再从下一个宏任务开始。因此以下代码会按序号输出:
前端面试题

js事件、事件流

事件

事件是文档或者浏览器窗口中发生的,特定的交互瞬间。
事件是用户或浏览器自身执行的某种动作,如click,load和mouseover都是事件的名字。事件是javaScript和DOM之间交互的桥梁。

事件流

前端面试题
前端面试题

你若触发,我便执行——事件发生,调用它的处理函数执行相应的JavaScript代码给出响应。

典型的例子有:页面加载完毕触发load事件;用户单击元素,触发click事件。

事件委托是什么

事件代理又称事件委托,是javaScript中绑定事件的常用技巧。顾名思义,‘事件代理’就是把原本需要绑定的事件委托给父元素,让父元素负责事件监听。事件代理的原理是DOM元素的事件冒泡。使用事件代理的好处是可以提高性能

数组对象有哪些原生方法,列举一下

pop、push、shift、unshift、splice、reverse、sort、concat、join、slice、toString、indexOf、lastIndexOf、reduce、reduceRight
forEach、map、filter、every、some

settimeout和setinterval区别

setTimeout只在指定时间后执行一次,代码如下:

下面展示一些 内联代码片

<script>  
//定时器 异步运行  
function hello(){  
alert("hello");  
}  
//使用方法名字执行方法  
var t1 = window.setTimeout(hello,1000);  
var t2 = window.setTimeout("hello()",3000);//使用字符串执行方法  
window.clearTimeout(t1);//去掉定时器  
</script>   

setInterval以指定时间为周期循环执行,代码如下:

//实时刷新时间单位为毫秒  
setInterval('refreshQuery()',8000);   
/* 刷新查询 */  
function refreshQuery(){  
   $("#mainTable").datagrid('reload',null);  
}  

两种方法根据不同的场景和业务需求择而取之,
一般情况下setTimeout用于延迟执行某方法或功能,
setInterval则一般用于刷新表单,对于一些表单的假实时指定时间刷新同步

防抖与节流

css

重绘与回流

浏览器使用流式布局,把HTML解析成DOM,CSS解析成CSSOM,两者合并就产生了Render Tree渲染树。一旦Render Tree构建完毕后,浏览器就可以根据它来绘制页面了。

当Render Tree中部分或全部元素的尺寸、结构、或某些属性发生改变时,浏览器重新渲染部分或全部文档的过程称为回流。会导致回流的操作如页面首次渲染,浏览器窗口大小改变,元素尺寸、位置、内容等变化,添加或删除可见DOM元素,**CSS伪类等;会导致回流的属性和方法如clientWidth、offsetWidth、scrollWidth等。

而当页面中元素只是样式改变,并不影响它在文档流中的位置时,浏览器将新样式赋予元素并重新绘制,这个过程则称为重绘。

可见回流必将引起重绘,重绘不一定会引起回流,页面布局和几何属性改变时就需要回流,回流比重绘代价更高。不过现代浏览器会维护一个队列,将多次的变动“攒着”,等积累一定数量的变动再一次性执行,但比如取offsetWidth这样的属性时,浏览器为了给精确的值会立即刷新队列。因此,避免重绘与回流的方法有:避免频繁操作样式,最好一次性重写style属性,或者将样式定义为class并一次性更改class属性;
避免频繁操作DOM,尽量使用离线的DOM,比如创建一个documentFragment,在它上面应用所有DOM操作,最后再把它添加回中;
也可以先为元素设置display: none,操作结束后再把它显示出来。因为在display属性为none的元素上进行的DOM操作不会引发回流和重绘;
避免频繁读取会引发回流/重绘的属性,如果确实需要多次使用,就用一个变量缓存起来;对具有复杂动画的元素使用绝对定位,使它脱离文档流,否则会引起父元素及后续元素频繁回流。

正在持续更新中,也欢迎前端小伙伴和我一起更新 ,也欢迎提出好的建议和不足的地方