本文作者:qiaoqingyi

高级前端开发面试题150道(高级前端开发面试题150道题)

qiaoqingyi 2023-01-19 634

今天给各位分享高级前端开发面试题150道的知识,其中也会对高级前端开发面试题150道题进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

WEB前端面试题

第二章 面试题基础篇

2.1 HTML面试题

面试题:行内元素有哪些?块级元素有哪些? 空(void)元素有那些?

面试题:页面导入样式时,使用link和@import有什么区别?

面试题:title与h1的区别、b与strong的区别、i与em的区别?

面试题:img标签的title和alt有什么区别?

面试题:png、jpg、gif 这些图片格式解释一下,分别什么时候用?

2.2 CSS面试题

面试题:css背景纹路

面试题:介绍一下CSS的盒子模型

面试题:CSS选择符有哪些?哪些属性可以继承?

面试题:CSS优先级算法如何计算?

面试题:用CSS画一个三角形

面试题:一个盒子不给宽度和高度如何水平垂直居中?

面试题:display有哪些值?说明他们的作用。

面试题:对BFC规范(块级格式化上下文:block formatting context)的理解?

面试题:清除浮动有哪些方式?

面试题:在网页中的应该使用奇数还是偶数的字体?为什么呢?

面试题:写一个左中右布局占满屏幕,其中左、右俩块固定宽200,中间自适应宽,要求先加载中间块,请写出结构及样式。

面试题:什么是CSS reset?

面试题:css sprite是什么,有什么优缺点

面试题:display: none;与visibility: hidden;的区别

面试题:position有哪些值?有什么作用? 【特别多公司问】

面试题:line-height和height有什么区别?

面试题:opacity 和 rgba区别

2.3 JavaScript基础面试题

面试题:延迟加载JS有哪些方式?

面试题:JS数据类型有哪些?

面试题:null和undefined的区别

面试题:JS数据类型考题

面试题:==和===有什么不同

面试题:JS微任务和宏任务

面试题:JS作用域考题

面试题:JS对象考题

面试题:JS作用域+this指向+原型 考题

面试题:JS判断变量是不是数组,你能写出哪些方法?

面试题:slice是干嘛的、splice是否会改变原数组

面试题:JS数组去重

面试题:找出多维数组最大值

面试题:给字符串新增方法实现功能

面试题:找出字符串出现最多次数的字符以及次数

2.4 真正移动端 —— H5/C3面试题

面试题:什么是语义化标签

面试题:::before 和 :after中双冒号和单冒号 有什么区别?解释一下这2个伪元素的作用。

面试题:如何关闭iOS键盘首字母自动大写

面试题:怎么让Chrome支持小于12px 的文字?

面试题:rem和em有什么样区别

面试题:ios系统中元素被触摸时产生的半透明灰色遮罩怎么去掉

面试题:webkit表单输入框placeholder的颜色值能改变吗?

面试题:禁止ios 长按时不触发系统的菜单,禁止iosandroid长按时下载图片

面试题:禁止ios和android用户选中文字

面试题:自适应 [淘宝无线适配]

面试题:响应式

第三章 面试题进阶篇

3.1 JavaScript进阶面试题

面试题:new操作符具体做了什么

面试题:闭包 【必须会】

面试题:原型链 【必须会】

面试题: JS继承有哪些方式

面试题:说一下call、apply、bind区别

面试题:sort背后原理是什么?

面试题:深拷贝和浅拷贝

面试题:localstorage、sessionstorage、cookie的区别

3.2 ES6面试题

面试题:var、let、const区别

面试题:作用域考题

面试题:将下列对象进行合并

面试题:箭头函数和普通函数有什么区别?

面试题:Promise有几种状态

面试题:find和filter的区别 【大厂】

面试题:some和every的区别 【大厂】

3.3 webpack面试题

面试题:webpack插件

3.4 Git面试题

面试题:git常用命令

面试题:解决冲突

面试题:GitFlow

第四章 面试题框架篇

4.1 区分初中高级的 —— Vue面试题

面试题:Vue2.x 生命周期有哪些?

1.系统自带八个

2.当一旦进入到某个组件会执行哪些生命周期

3.$el和$data在哪个阶段有

4.如果使用keep-alive会多俩个生命周期

5.如果加入keep-alive第一次进入组件会执行哪些生命周期

6.如果加入keep-alive第二次或者第N进入该组件会执行哪些生命周期

面试题:谈谈你对keep-alive的了解

面试题:v-if和v-show区别

面试题:v-if和v-for优先级 2.x

面试题:ref是什么?

面试题:nextTick是什么?

面试题:Vue中如何做样式穿透

面试题:scoped原理

面试题:Vuex是单向数据流还是双向数据流?

面试题:讲一下MVVM

面试题:双向绑定原理

面试题:什么是虚拟DOM

面试题:key是干什么?

面试题:diff算法

面试题:Vue组件传值

面试题:props和data优先级谁高?

面试题:computed、methods、watch有什么区别?

面试题:Vuex

面试题:Vue路由

面试题:Vue项目打包后出现空白页

4.2 微信小程序面试题

面试题:如何自定义头部?

面试题:如何自定义底部?

4.3 uni-app面试题

面试题:生命周期

面试题:条件编译

第五章 面试题性能优化篇

Web前端面试的常见面试题汇总

今天小编要跟大家分享的文章是关于参加Web前端面试的常见面试题汇总。准备参加Web前端面试的小伙伴们来和小编一起看一看吧,希望本篇文章能够对大家有所帮助。

1.渐进增强与优雅降级

渐进增强

并不是一种技术,而是一种设计思想。各个浏览器的渲染能力各不相同,要做一个每个人都能看到的网页、感受到的体验都一致的网站几乎不可能。但还是得网站的可访问性,保证用户在任何环境下都能正常访问网页得核心内容或能使用基本功能(避免网页打不开、排版错误等),并为他们提供当前条件下最好的体验,这就是渐进增强得核心思想。

优雅降级也是一种设计思想,为了保证在高版本浏览器中提供最好的体验,碰到低版本浏览器再降级进行兼容处理,使其能正常浏览。

这两种思想的区别在于:

1.渐进增强是向上兼容,优雅降级是向下兼容;

2.渐进增强是从简单到复杂,优雅降级是从复杂到简单;

3.渐进增强关注的是内容(保证核心内容),优雅降级关注的是浏览体验(为了兼容低版本浏览器)

2.DOCTYPE

作用

DTD(DocumentTypeDefinition,文档类型定义)是一系列的语法规则,用来定义XML或(X)HTML

的文档类型。浏览器会使用它来判断文档类型,决定何种协议来解析,以及切换浏览模式。

DOCTYPE是用来声明文档类型和DTD

规范的,一个主要的用途便是文件的合法性验证。如果文档代码不合法,那么浏览器解析时便会出现一些差错。

HTML5的文档类型声明:

HTML4.01Strict(HTML4.01严格模式)的DTD包含所有HTML

元素和属性,但不包括展示性的和弃用的元素(如font),它的文档类型声明:

-//W3C//DTDXHTML1.0Strict//EN"

""

标准模式与怪异模式

怪异模式(Quirks

Mode)用于模拟旧浏览器的行为。早期的网站并不会遵循完整的规范,随着浏览器支持越来越多的规范,在那些旧的浏览器中开发的页面在显示时会被破坏。为了向后兼容,浏览器发明了怪异模式,一行错误或无效的

DOCTYPE都会触发怪异模式。

浏览器使用文件开头的DOCTYPE来决定用怪异模式处理或标准模式处理。DOCTYPE

可以确保不同浏览器以相同的方式解析文档,以及执行相同的渲染模式。

怪异模式与标准模式的主要区别:

1.怪异模式的宽度和高度会包含padding和border。标准模式不包含,标准模式下可以通过设置box-sizing:

border-box将标准盒模型转化成怪异模式下的盒模型。

2.怪异模式下,当内容超出容器高度时,会将容器拉伸,而不是溢出。

3.怪异模式下,在表格中的字体样式(如font-size)不会继承。

4.怪异模式下颜色值必须使用十六进制标记法。

3.语义化

HTML5

中的语义化就是让元素、属性或属性值有含义,更准确地标记特定类型的内容。对元素语义化的目的是为了让元素的语义和呈现分离,元素只负责文档内容的结构与含义,而CSS

样式控制内容的呈现,像元素,没有语义但却能将字体变粗,这类元素违背了语义化的目的,将会被废弃。

优点

·使得HTML文档结构清晰、布局合理、主体突出、可读性更强。

·有利于SEO,搜索引擎根据标签来确定上下文和各个关键字的权重。

·方便其他设备解析,如盲人阅读器根据语义渲染网页。

·有利于开发和维护,语义化更具可读性,代码更好维护,与CSS3关系更和谐。

语义化标签

·定义文档的页眉区域,应作为介绍内容或者导航链接栏的容器;

·footer内容的页脚,通常包含该章节作者、版权数据或者与文档相关的链接等信息;

·article

文档、页面、应用或网站中的独立结构,是可独立分配的、可复用的结构,如在发布中,它可能是论坛帖子、杂志或新闻文章、博客、用户提交的评论、交互式组件,或者其他独立的内容项目;

·nav描述一个含有多个超链接的区域,该区域包含跳转到其他页面或页面内部其他部分的链接列表;

·section表示文档中的一个区域(或节),比如,内容中的一个专题组;

·main定义文档的主要内容,该内容在文档中应当是独一无二的,不包含任何在文档中重复的内容,比如侧边栏,导航栏链接,版权信息,网站

logo,搜索框(搜索框作为文档的主要内容);

·aside

表示一个和其余页面内容几乎无关的部分,被认为是独立于该内容的一部分且可以被单独的拆分出来而不会影响整体。通常表现为侧边栏或嵌入内容。

4.超链接伪类

:link、:visited、:active和:hover的声明顺序是怎样的?

:link表示未访问的链接状态;

:visited表示已访问状态;:active表示激活状态(鼠标按下);:hover表示悬停状态。

推荐顺序是LVHA,即:link:visited:hover:active。理由如下:

·当鼠标悬停在未访问的链接上时,:link和:hover都会命中,如果:hover在:link

之前声明,那么(:hover)就会被覆盖;

·当鼠标悬停在已访问的连接上时,:visited和:hover都会命中,如果:hover在:visited

之前声明,那么(:hover)就会被覆盖;

·当鼠标单击链接时,:active和:hover都会命中,我们大多是想让:hover只在悬停时展示样式,按下鼠标时使用:active

样式,因此:active在:hover之后声明;

·综上,:hover应在:link和:visited之后,在:active之前,因此active在最后。而:link和

:visited两者的顺序无所谓,互不影响。

5.CSS常见的长度单位

CSS中除了px长度单位之外,还有下面几个长度单位:

·pc六分之一英寸,1pc=12pt=1/6*1in=16px;

·pt一磅,72分之一英寸。1pt=1/12_1pc=1/72_1in≈1.33px;

·in一英寸,1in=2.54cm=96px;

·ex在含有“X”字母的字体中,它是该字体的小写字母的高度。对于很多字体来说,1ex≈0.5em;

·em1em等于父级元素的字体大小,2em就是父级元素字体大小的二倍;

·rem当用在根元素()的font-size上面时,它代表了它的初始值;

·ch代表元素所用字体font中“0”这一字形的宽度;

·vh1vh相当于视口高度的1%,100vh就是视口的高度;

·vw1vw相当于视口宽度的1%,100vw就是视口的宽度;

·vmax视口高度vw和宽度vh两者中的最小值

·vmin视口高度vw和宽度vh两种中的最大值;

·%相对于父级元素的大小来确定;

参考:CSS[1]

CSSpercentage[2]

6.事件对象

冒泡与捕获

事件冒泡与捕获是事件处理的两种机制,主要描述当在一个元素上有两个相同类型的事件处理器被激活会发生什么。

在点击子元素时,浏览器运行了两种不同的阶段:捕获阶段和冒泡阶段。捕获阶段的行为:

·浏览器检查元素的最外层祖先,是否在捕获阶段中注册了一个onclick事件处理程序,如果是,则运行它;

·

然后,它移动到中单击元素的下一个祖先元素,并执行相同的操作,然后是单击元素再下一个祖先元素,依此类推,直到到达实际点击的元素;

而冒泡与捕获恰恰相反:

·浏览器检查实际点击的元素是否在冒泡阶段中注册了一个onclick事件处理程序,如果是,则运行它;

·然后它移动到下一个直接的祖先元素,并做同样的事情,然后是下一个,等等,直到它到达元素;

而现代浏览器在默认情况下,所有事件处理程序都在冒泡阶段进行注册。因此上面代码在点击子元素时会先执行子元素绑定的事件,然后向上冒泡,触发父元素绑定的事件。

addEventListener函数的第三个参数是个布尔值。含义:

·当布尔值是false时(这也是默认值),表示向上冒泡触发事件;

·当布尔值是true时,表示向下捕获触发事件;

不能冒泡的事件

有些事件是不会冒泡的。比如:

·blur元素失去焦点时触发,focusout事件也是失去焦点时触发,但可以冒泡;

·focus元素获取焦点时触发;

·mouseenter鼠标移动到元素上时会触发该事件,与之对应的是mouseover事件,但会冒泡;

·mouseleave鼠标离开元素时触发,与之对应的是mouseout,但会冒泡;

事件冒泡可以让我们利用事件委托,尤其是处理大量子元素时,如果给每个子元素都绑定事件,这是不优雅的,可以将事件绑定到父元素上,并让子节点上发生的事件冒泡到父节点上,利用

e.target属性可以获取到当前触发事件的子元素。

事件对象中的方法

·stopPropagation()阻止事件冒泡,当设置后,点击该元素时父元素绑定的事件就不会再触发;

·preventDefault()阻止默认事件的发生;

·stopImmediatePropagation()它用来阻止监听同一事件的其他事件监听器被调用以及阻止事件冒泡,比如给同一个div

元素绑定多个click事件(使用addEventListener方法可以注册多个),当在第二个事件函数中调用

stopImmediatePropagation方法时,点击div元素时,后面注册的click将不会被触发,而且还会阻止事件冒泡;

比如下面的例子,给p绑定多个click事件,在第二个事件函数中调用stopImmediatePropagation,第三个click

事件就不会触发,因为也阻止了冒泡,因此父元素的click事件也不会触发。

paragraph




document.querySelector("div").addEventListener("click",(event)=>{


alert("我是div元素,我是p元素的上层元素");


//p元素的click事件没有向上冒泡,该函数不会被执行


},false);


constp=document.querySelector('p')


p.addEventListener("click",(event)=>{


alert("我是p元素上被绑定的第一个监听函数");


},false);


p.addEventListener("click",(event)=>{


alert("我是p元素上被绑定的第二个监听函数");


event.stopImmediatePropagation();


//执行stopImmediatePropagation方法,阻止click事件冒泡,并且阻止p元素上绑定的其他click
事件的事件监听函数的执行.


},false);


p.addEventListener("click",(event)=>{


alert("我是p元素上被绑定的第三个监听函数");


//该监听函数排在上个函数后面,该函数不会被执行


},false);


在IE浏览器中,使用e.cancelBubble=true也可以取消事件冒泡;使用e.returnValue=false

也能阻止默认事件的发生。

target与currentTarget

target属性指向的是事件目标,而currentTarget属性指向的是正在处理当前事件的对象,它总是指向事件绑定的元素。而target

指向的可能不是定义时的事件目标。

例如:

div.addEventListener('click',(e)={

console.log(e.target,e.currentTarget);

},false);

e.target可能指向div元素,也可能指向它的子元素。而e.currentTarget总是指向div元素。

以上就是小编今天为大家分享的关于参加Web前端面试的常见面试题汇总的文章,希望本篇文章能够对正准备参加前端面试的小伙伴们有所帮助,想要了解更多Web前端知识记得关注北大青鸟Web前端培训官网,最后祝愿小伙伴们工作顺利,成为一名优秀的Web前端工程师。

参考资料

[1]

CSSlength:#/zh-CN/docs/Web/CSS/length

[2]

CSSpercentage:

#/zh-CN/docs/Web/CSS/percentage

高级前端开发面试题150道(高级前端开发面试题150道题)

前端常见面试题

前端开发可能问到的问题:

自我介绍(一定要对项目很熟悉)

ui-app web前端技术体系?

响应式怎么做?

render跟状态的差异

类组件的生命周期?

阻止冒泡,阻止事件默认行为

文本垂直居中。 line-height设置为元素高度。

用reduce讲数组中的对象进行合并

解释localstorage sessionstorage cookie

eventbus满足event.on('eventname', callback)

display有几个值?默认值?

position有几个值?默认值?

div水平垂直居中?

position有哪些值

react相关问题(概念理解、通讯组件等)、react常用内置

React-router

html+css

页面增删改查

position的值 absolute relative fixed static

工作中是怎么联调和上线的(现场想合适的前后端联调方式,能和webpack环境切换联系起来)

antd的Form shouldUpdate增量更新方式,性能优化。

对Hooks的理解

3:操作dom点击事件向服务器上传数据,在上传未完成之前不可重复操作事件

4:日期格式化,日期不足前两位补0(2021-06-06 06:06:00)

用css写一个布局,左侧固定宽度,右侧自适应

你看

前端经典面试题(60道前端面试题包含JS、CSS、React、浏览器等)

防抖

节流

误区:我们经常说get请求参数的大小存在限制,而post请求的参数大小是无限制的。

实际上HTTP 协议从未规定 GET/POST 的请求长度限制是多少。对get请求参数的限制是来源与浏览器或web服务器,浏览器或web服务器限制了url的长度。为了明确这个概念,我们必须再次强调下面几点:

补充补充一个get和post在缓存方面的区别:

可从IIFE、AMD、CMD、CommonJS、UMD、webpack(require.ensure)、ES Module、

vue和react都是采用diff算法来对比新旧虚拟节点,从而更新节点。在vue的diff函数中(建议先了解一下diff算法过程)。在交叉对比中,当新节点跟旧节点 头尾交叉对比 没有结果时,会根据新节点的key去对比旧节点数组中的key,从而找到相应旧节点(这里对应的是一个key = index 的map映射)。如果没找到就认为是一个新增节点。而如果没有key,那么就会采用遍历查找的方式去找到对应的旧节点。一种一个map映射,另一种是遍历查找。相比而言。map映射的速度更快。vue部分源码如下:

创建map函数

遍历寻找

在React中, 如果是由React引发的事件处理(比如通过onClick引发的事件处理),调用setState不会同步更新this.state,除此之外的setState调用会同步执行this.state 。所谓“除此之外”,指的是绕过React通过addEventListener直接添加的事件处理函数,还有通过setTimeout/setInterval产生的异步调用。

**原因:**在React的setState函数实现中,会根据一个变量isBatchingUpdates判断是直接更新this.state还是放到队列中回头再说,而isBatchingUpdates默认是false,也就表示setState会同步更新this.state,但是, 有一个函数batchedUpdates,这个函数会把isBatchingUpdates修改为true,而当React在调用事件处理函数之前就会调用这个batchedUpdates,造成的后果,就是由React控制的事件处理过程setState不会同步更新this.state 。

虚拟dom相当于在js和真实dom中间加了一个缓存,利用dom diff算法避免了没有必要的dom操作,从而提高性能。

具体实现步骤如下:

用 JavaScript 对象结构表示 DOM 树的结构;然后用这个树构建一个真正的 DOM 树,插到文档当中

当状态变更的时候,重新构造一棵新的对象树。然后用新的树和旧的树进行比较,记录两棵树差异

把2所记录的差异应用到步骤1所构建的真正的DOM树上,视图就更新了。

结构:display:none: 会让元素完全从渲染树中消失,渲染的时候不占据任何空间, 不能点击, visibility: hidden:不会让元素从渲染树消失,渲染元素继续占据空间,只是内容不可见,不能点击 opacity: 0: 不会让元素从渲染树消失,渲染元素继续占据空间,只是内容不可见,可以点击

继承:display: none:是非继承属性,子孙节点消失由于元素从渲染树消失造成,通过修改子孙节点属性无法显示。visibility: hidden:是继承属性,子孙节点消失由于继承了hidden,通过设置visibility: visible;可以让子孙节点显式。

性能:displaynone : 修改元素会造成文档回流,读屏器不会读取display: none元素内容,性能消耗较大 visibility:hidden: 修改元素只会造成本元素的重绘,性能消耗较少读屏器读取visibility: hidden元素内容 opacity: 0 :修改元素会造成重绘,性能消耗较少

联系:它们都能让元素不可见

常用的一般为三种 .clearfix , clear:both , overflow:hidden ;

比较好是 .clearfix ,伪元素万金油版本,后两者有局限性.

clear:both :若是用在同一个容器内相邻元素上,那是贼好的,有时候在容器外就有些问题了, 比如相邻容器的包裹层元素塌陷

overflow:hidden :这种若是用在同个容器内,可以形成 BFC 避免浮动造成的元素塌陷

概念:将多个小图片拼接到一个图片中。通过 background-position 和元素尺寸调节需要显示的背景图案。

优点:

缺点:

block 元素特点:

1.处于常规流中时,如果 width 没有设置,会自动填充满父容器 2.可以应用 margin/padding 3.在没有设置高度的情况下会扩展高度以包含常规流中的子元素 4.处于常规流中时布局时在前后元素位置之间(独占一个水平空间) 5.忽略 vertical-align

inline 元素特点

1.水平方向上根据 direction 依次布局

2.不会在元素前后进行换行

3.受 white-space 控制

4. margin/padding 在竖直方向上无效,水平方向上有效

5. width/height 属性对非替换行内元素无效,宽度由元素内容决定

6.非替换行内元素的行框高由 line-height 确定,替换行内元素的行框高由 height , margin , padding , border 决定 7.浮动或绝对定位时会转换为 block 8. vertical-align 属性生效

GIF :

JPEG :

PNG :

七种数据类型

(ES6之前)其中5种为基本类型: string , number , boolean , null , undefined ,

ES6出来的 Symbol 也是原始数据类型 ,表示独一无二的值

Object 为引用类型(范围挺大),也包括数组、函数,

输出结果是:

工厂模式

简单的工厂模式可以理解为解决多个相似的问题;

单例模式

只能被实例化(构造函数给实例添加属性与方法)一次

沙箱模式

将一些函数放到自执行函数里面,但要用闭包暴露接口,用变量接收暴露的接口,再调用里面的值,否则无法使用里面的值

1.字面量

2.Object构造函数创建

3.使用工厂模式创建对象

4.使用构造函数创建对象

HTML中与javascript交互是通过事件驱动来实现的,例如鼠标点击事件onclick、页面的滚动事件onscroll等等,可以向文档或者文档中的元素添加事件侦听器来预订事件。想要知道这些事件是在什么时候进行调用的,就需要了解一下“事件流”的概念。

什么是事件流:事件流描述的是从页面中接收事件的顺序,DOM2级事件流包括下面几个阶段。

addEventListener : addEventListener 是DOM2 级事件新增的指定事件处理程序的操作,这个方法接收3个参数:要处理的事件名、作为事件处理程序的函数和一个布尔值。最后这个布尔值参数如果是true,表示在捕获阶段调用事件处理程序;如果是false,表示在冒泡阶段调用事件处理程序。

IE只支持事件冒泡 。

获取一个对象的原型,在chrome中可以通过__proto__的形式,或者在ES6中可以通过Object.getPrototypeOf的形式。

那么Function.proto是什么么?也就是说Function由什么对象继承而来,我们来做如下判别。

我们发现Function的原型也是Function。

我们用图可以来明确这个关系:

这里来举个栗子,以 Object 为例,我们常用的 Object 便是一个构造函数,因此我们可以通过它构建实例。

则此时, 实例为instance , 构造函数为Object ,我们知道,构造函数拥有一个 prototype 的属性指向原型,因此原型为:

这里我们可以来看出三者的关系:

在 JS 中,继承通常指的便是 原型链继承 ,也就是通过指定原型,并可以通过原型链继承原型上的属性或者方法。

在函数式编程中,函数是一等公民。那么函数柯里化是怎样的呢?

函数柯里化指的是将能够接收多个参数的函数转化为接收单一参数的函数,并且返回接收余下参数且返回结果的新函数的技术。

函数柯里化的主要作用和特点就是参数复用、提前返回和延迟执行。

在一个函数中,首先填充几个参数,然后再返回一个新的函数的技术,称为函数的柯里化。通常可用于在不侵入函数的前提下,为函数 预置通用参数 ,供多次重复调用。

call 和 apply 都是为了解决改变 this 的指向。作用都是相同的,只是传参的方式不同。

除了第一个参数外, call 可以接收一个参数列表, apply 只接受一个参数数组。

bind 和其他两个方法作用也是一致的,只是该方法会返回一个函数。并且我们可以通过 bind 实现柯里化。

如何实现一个 bind 函数

对于实现以下几个函数,可以从几个方面思考

如何实现一个call函数

如何实现一个apply函数

箭头函数其实是没有 this 的,这个函数中的 this 只取决于他外面的第一个不是箭头函数的函数的 this 。在这个例子中,因为调用 a 符合前面代码中的第一个情况,所以 this 是 window 。并且 this 一旦绑定了上下文,就不会被任何代码改变。

关于 let 的是否存在变量提升,我们何以用下面的例子来验证:

let 变量如果不存在变量提升, console.log(name) 就会输出 ConardLi ,结果却抛出了 ReferenceError ,那么这很好的说明了, let 也存在变量提升,但是它存在一个“暂时死区”,在变量未初始化或赋值前不允许访问。

变量的赋值可以分为三个阶段:

关于 let 、 var 和 function :

依次输出:undefined - 10 - 20

答案: D

colorChange 方法是静态的。静态方法仅在创建它们的构造函数中存在,并且不能传递给任何子级。由于 freddie 是一个子级对象,函数不会传递,所以在 freddie 实例上不存在 freddie 方法:抛出 TypeError 。

1.使用第一次push,obj对象的push方法设置 obj[2]=1;obj.length+=1 2.使用第二次push,obj对象的push方法设置 obj[3]=2;obj.length+=1 3.使用console.log输出的时候,因为obj具有 length 属性和 splice 方法,故将其作为数组进行打印 4.打印时因为数组未设置下标为 0 1 处的值,故打印为empty,主动 obj[0] 获取为 undefined

undefined {n:2}

首先,a和b同时引用了{n:2}对象,接着执行到a.x = a = {n:2}语句,尽管赋值是从右到左的没错,但是.的优先级比=要高,所以这里首先执行a.x,相当于为a(或者b)所指向的{n:1}对象新增了一个属性x,即此时对象将变为{n:1;x:undefined}。之后按正常情况,从右到左进行赋值,此时执行a ={n:2}的时候,a的引用改变,指向了新对象{n:2},而b依然指向的是旧对象。之后执行a.x = {n:2}的时候,并不会重新解析一遍a,而是沿用最初解析a.x时候的a,也即旧对象,故此时旧对象的x的值为{n:2},旧对象为 {n:1;x:{n:2}},它被b引用着。后面输出a.x的时候,又要解析a了,此时的a是指向新对象的a,而这个新对象是没有x属性的,故访问时输出undefined;而访问b.x的时候,将输出旧对象的x的值,即{n:2}。

在比较相等性,原始类型通过它们的值进行比较,而对象通过它们的引用进行比较。 JavaScript 检查对象是否具有对内存中相同位置的引用。

我们作为参数传递的对象和我们用于检查相等性的对象在内存中位于不同位置,所以它们的引用是不同的。

这就是为什么 { age: 18 } === { age: 18 } 和 { age: 18 } == { age: 18 } 返回 false 的原因。

所有对象键(不包括 Symbols )都会被存储为字符串,即使你没有给定字符串类型的键。这就是为什么 obj.hasOwnProperty('1') 也返回 true 。

上面的说法不适用于 Set 。在我们的 Set 中没有 “1” : set.has('1') 返回 false 。它有数字类型 1 , set.has(1) 返回 true 。

这题考察的是对象的键名的转换。

catch 块接收参数 x 。当我们传递参数时,这与变量的 x 不同。这个变量 x 是属于 catch 作用域的。

之后,我们将这个块级作用域的变量设置为 1 ,并设置变量 y 的值。现在,我们打印块级作用域的变量 x ,它等于 1 。

在 catch 块之外, x 仍然是 undefined ,而 y 是 2 。当我们想在 catch 块之外的 console.log(x) 时,它返回 undefined ,而 y 返回 2 。

有哪些经典的前端开发面试题及答案解析

行元素与块元素的区别;

如何清除浮动;

定位方式当中,absolute与fixed、relative的区别;

事件的兼容问题;

Ajax是什么;

如何优化你的页面;

响应式布局是什么等等。

经典的前端面试题至少有近百道,在这里也没办法全部给你列出来,你可以看看这个(小-程序),里面有好几百道面试真题,也有比较好的答案解析。

Web前端岗位面试题有哪些

前端面试题汇总,基本上会有四大类问题,具体如下:

一、HTML

1、Doctype作用?严格模式与混杂模式如何区分?它们有何意义?

2、HTML5 为什么只需要写 !DOCTYPE HTML?

3、行内元素有哪些?块级元素有哪些? 空(void)元素有那些?

4、页面导入样式时,使用link和@import有什么区别?

5、介绍一下你对浏览器内核的理解?

6、常见的浏览器内核有哪些?

7、html5有哪些新特性、移除了那些元素?如何处理HTML5新标签的浏览器兼容问题?如何区分 HTML 和 HTML5?

8、简述一下你对HTML语义化的理解?

9、HTML5的离线储存怎么使用,工作原理能不能解释一下?

10、浏览器是怎么对HTML5的离线储存资源进行管理和加载的呢?

11、请描述一下 cookies,sessionStorage 和 localStorage 的区别?

12、iframe有那些缺点?

13、Label的作用是什么?是怎么用的?(加 for 或 包裹)

14、HTML5的form如何关闭自动完成功能?

15、如何实现浏览器内多个标签页之间的通信? (阿里)

16、webSocket如何兼容低浏览器?(阿里)

17、页面可见性(Page Visibility)API 可以有哪些用途?

18、如何在页面上实现一个圆形的可点击区域?

19、实现不使用 border 画出1px高的线,在不同浏览器的Quirksmode和CSSCompat模式下都能保持同一效果。

20、网页验证码是干嘛的,是为了解决什么安全问题?

21、tite与h1的区别、b与strong的区别、i与em的区别?

二、css

1、介绍一下标准的CSS的盒子模型?与低版本IE的盒子模型有什么不同的?

2、CSS选择符有哪些?哪些属性可以继承?

3、CSS优先级算法如何计算?

4、CSS3新增伪类有那些?

5、如何居中div?如何居中一个浮动元素?如何让绝对定位的div居中?

6、display有哪些值?说明他们的作用。

7、position的值relative和absolute定位原点是?

8、CSS3有哪些新特性?

9、请解释一下CSS3的Flexbox(弹性盒布局模型),以及适用场景?

10、用纯CSS创建一个三角形的原理是什么?

11、一个满屏 品 字布局 如何设计?

三、常见兼容性问题?

1、li与li之间有看不见的空白间隔是什么原因引起的?有什么解决办法?

2、经常遇到的浏览器的兼容性有哪些?原因,解决方法是什么,常用hack的技巧 ?

3、为什么要初始化CSS样式。

4、absolute的containing block计算方式跟正常流有什么不同?

5、CSS里的visibility属性有个collapse属性值是干嘛用的?在不同浏览器下以后什么区别?

6、position跟display、margin collapse、overflow、float这些特性相互叠加后会怎么样?

7、对BFC规范(块级格式化上下文:block formatting context)的理解?

8、CSS权重优先级是如何计算的?

9、请解释一下为什么会出现浮动和什么时候需要清除浮动?清除浮动的方式

10、移动端的布局用过媒体查询吗?

11、使用 CSS 预处理器吗?喜欢那个?

12、CSS优化、提高性能的方法有哪些?

13、浏览器是怎样解析CSS选择器的?

14、在网页中的应该使用奇数还是偶数的字体?为什么呢?

15、margin和padding分别适合什么场景使用?

16、抽离样式模块怎么写,说出思路,有无实践经验?[阿里航旅的面试题]

17、元素竖向的百分比设定是相对于容器的高度吗?

18、全屏滚动的原理是什么?用到了CSS的那些属性?

19、什么是响应式设计?响应式设计的基本原理是什么?如何兼容低版本的IE?

20、视差滚动效果,如何给每页做不同的动画?(回到顶部,向下滑动要再次出现,和只出现一次分别怎么做?)

21、::before 和 :after中双冒号和单冒号 有什么区别?解释一下这2个伪元素的作用。

22、如何修改chrome记住密码后自动填充表单的黄色背景 ?

23、你对line-height是如何理解的?

24、设置元素浮动后,该元素的display值是多少?(自动变成display:block)

25、怎么让Chrome支持小于12px 的文字?

26、让页面里的字体变清晰,变细用CSS怎么做?(-webkit-font-smoothing: antialiased;)

27、font-style属性可以让它赋值为“oblique” oblique是什么意思?

28、position:fixed;在android下无效怎么处理?

29、如果需要手动写动画,你认为最小时间间隔是多久,为什么?(阿里)

30、display:inline-block 什么时候会显示间隙?(携程)

31、overflow: scroll时不能平滑滚动的问题怎么处理?

32、有一个高度自适应的div,里面有两个div,一个高度100px,希望另一个填满剩下的高度。

33、png、jpg、gif 这些图片格式解释一下,分别什么时候用。有没有了解过webp?

34、什么是Cookie 隔离?(或者说:请求资源的时候不要让它带cookie怎么做)

35、style标签写在body后与body前有什么区别?

四、JavaScript

1、介绍JavaScript的基本数据类型。

2、说说写JavaScript的基本规范?

3、JavaScript原型,原型链 ? 有什么特点?

4、JavaScript有几种类型的值?(堆:原始数据类型和 栈:引用数据类型),你能画一下他们的内存图吗?

5、Javascript如何实现继承?

6、Javascript创建对象的几种方式?

7、Javascript作用链域?

8、谈谈This对象的理解。

9、eval是做什么的?

10、什么是window对象? 什么是document对象?

11、null,undefined的区别?

12、写一个通用的事件侦听器函数(机试题)。

13、[“1”, “2”, “3”].map(parseInt) 答案是多少?

14、关于事件,IE与火狐的事件机制有什么区别? 如何阻止冒泡?

15、什么是闭包(closure),为什么要用它?

16、javascript 代码中的”use strict”;是什么意思 ? 使用它区别是什么?

17、如何判断一个对象是否属于某个类?

18、new操作符具体干了什么呢?

19、用原生JavaScript的实现过什么功能吗?

20、Javascript中,有一个函数,执行时对象查找时,永远不会去查找原型,这个函数是?

21、对JSON的了解?

22、[].forEach.call($$("*"),function(a){ a.style.outline="1px solid #"+(~~(Math.random()*(124))).toString(16) }) 能解释一下这段代码的意思吗?

23、js延迟加载的方式有哪些?

24、Ajax 是什么? 如何创建一个Ajax?

25、同步和异步的区别?

26、如何解决跨域问题?

27、页面编码和被请求的资源编码如果不一致如何处理?

28、模块化开发怎么做?

29、AMD(Modules/Asynchronous-Definition)、CMD(Common Module

Definition)规范区别?

30、requireJS的核心原理是什么?(如何动态加载的?如何避免多次加载的?如何 缓存的?)

31、让你自己设计实现一个requireJS,你会怎么做?

32、谈一谈你对ECMAScript6的了解?

33、ECMAScript6 怎么写class么,为什么会出现class这种东西?

34、异步加载的方式有哪些?

35、documen.write和 innerHTML的区别?

36、DOM操作——怎样添加、移除、移动、复制、创建和查找节点?

37、.call() 和 .apply() 的含义和区别?

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

39、JS 怎么实现一个类。怎么实例化这个类

40、JavaScript中的作用域与变量声明提升?

41、如何编写高性能的Javascript?

42、那些操作会造成内存泄漏?

43、JQuery的源码看过吗?能不能简单概况一下它的实现原理?

44、jQuery.fn的init方法返回的this指的是什么对象?为什么要返回this?

45、jquery中如何将数组转化为json字符串,然后再转化回来?

46、jQuery 的属性拷贝(extend)的实现原理是什么,如何实现深拷贝?

47、jquery.extend 与 jquery.fn.extend的区别?

48、jQuery 的队列是如何实现的?队列可以用在哪些地方?

49、谈一下Jquery中的bind(),live(),delegate(),on()的区别?

50、JQuery一个对象可以同时绑定多个事件,这是如何实现的?

51、是否知道自定义事件。jQuery里的fire函数是什么意思,什么时候用?

52、jQuery 是通过哪个方法和 Sizzle 选择器结合的?(jQuery.fn.find()进入Sizzle)

53、针对 jQuery性能的优化方法?

54、Jquery与jQuery UI有啥区别?

55、JQuery的源码看过吗?能不能简单说一下它的实现原理?

56、jquery 中如何将数组转化为json字符串,然后再转化回来?

57、jQuery和Zepto的区别?各自的使用场景?

58、针对 jQuery 的优化方法?

59、Zepto的点透问题如何解决?

60、jQueryUI如何自定义组件?

61、需求:实现一个页面操作不会整页刷新的网站,并且能在浏览器前进、后退时正确响应。给出你的技术实现方案?

62、如何判断当前脚本运行在浏览器还是node环境中?(阿里)

63、移动端最小触控区域是多大?

64、jQuery 的 slideUp动画 ,如果目标元素是被外部事件驱动, 当鼠标快速地连续触发外部元素事件, 动画会滞后的反复执行,该如何处理呢?

65、把 Script 标签 放在页面的最底部的body封闭之前 和封闭之后有什么区别?浏览器会如何解析它们?

66、移动端的点击事件的有延迟,时间是多久,为什么会有? 怎么解决这个延时?(click 有 300ms 延迟,为了实现safari的双击事件的设计,浏览器要知道你是不是要双击操作。)

67、知道各种JS框架(Angular, Backbone, Ember, React, Meteor, Knockout…)么? 能讲出他们各自的优点和缺点么?

68、Underscore 对哪些 JS 原生对象进行了扩展以及提供了哪些好用的函数方法?

69、解释JavaScript中的作用域与变量声明提升?

70、那些操作会造成内存泄漏?

71、JQuery一个对象可以同时绑定多个事件,这是如何实现的?

72、Node.js的适用场景?

(如果会用node)知道route, middleware, cluster, nodemon, pm2, server-side rendering么?

73、解释一下 Backbone 的 MVC 实现方式?

74、什么是“前端路由”?什么时候适合使用“前端路由”? “前端路由”有哪些优点和缺点?

75、知道什么是webkit么? 知道怎么用浏览器的各种工具来调试和debug代码么?

76、如何测试前端代码么? 知道BDD, TDD, Unit Test么? 知道怎么测试你的前端工程么(mocha, sinon, jasmin, qUnit..)?

77、前端templating(Mustache, underscore, handlebars)是干嘛的, 怎么用?

78、简述一下 Handlebars 的基本用法?

79、简述一下 Handlerbars 的对模板的基本处理流程, 如何编译的?如何缓存的?

80、用js实现千位分隔符?(来源:前端农民工,提示:正则+replace)

检测浏览器版本版本有哪些方式?

81、我们给一个dom同时绑定两个点击事件,一个用捕获,一个用冒泡,你来说下会执行几次事件,然后会先执行冒泡还是捕获

高级前端开发面试题150道的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于高级前端开发面试题150道题、高级前端开发面试题150道的信息别忘了在本站进行查找喔。

阅读
分享