•行内元素有哪些?块级元素有哪些? 空(void)元素有那些?
(1)CSS规范规定,每一个元素都有display属性,肯定该元素的类型,每一个元素都有默认的display值,
好比div默认display属性值为“block”,成为“块级”元素;
span默认display属性值为“inline”,是“行内”元素。
(2)行内元素有:a b span img input select strong(强调的语气)
块级元素有:div ul ol li dl dt dd h1 h2 h3 h4…p
(3)知名的空元素:
<br> <hr> <img> <input> <link> <meta>
不为人知的是:
<area> <base> <col> <command> <embed> <keygen> <param> <source> <track> <wbr>
•link 和@import 的区别是?
(1)link属于XHTML标签,而@import是CSS提供的;
(2)页面被加载的时,link会同时被加载,而@import引用的CSS会等到页面被加载完再加载;
(3)import只在IE5以上才能识别,而link是XHTML标签,无兼容问题;
(4)link方式的样式的权重 高于@import的权重.
•浏览器的内核分别是什么?
* IE浏览器的内核Trident、Mozilla的Gecko、Chrome的Blink(WebKit的分支)、Opera内核原为Presto,现为Blink;
•常见兼容性问题?
•html5有哪些新特性、移除了那些元素?如何处理HTML5新标签的浏览器兼容问题?如何区分 HTML 和 HTML5?
* HTML5 如今已经不是 SGML 的子集,主要是关于图像,位置,存储,多任务等功能的增长。
* 绘画 canvas
用于媒介回放的 video 和 audio 元素
本地离线存储 localStorage 长期存储数据,浏览器关闭后数据不丢失;
sessionStorage 的数据在浏览器关闭后自动删除
语意化更好的内容元素,好比 article、footer、header、nav、section 、aside
表单控件,calendar、date、time、email、url、search
新的技术webworker, websockt, Geolocation
* 移除的元素
纯表现的元素:basefont,big,center,font, s,strike,tt,u;
对可用性产生负面影响的元素:frame,frameset,noframes;
支持HTML5新标签:
* IE8/IE7/IE6支持经过document.createElement方法产生的标签,
能够利用这一特性让这些浏览器支持HTML5新标签,
浏览器支持新标签后,还须要添加标签默认的样式:
* 固然最好的方式是直接使用成熟的框架、使用最多的是html5shim框架
<!--[if lt IE 9]>
<script> src="http://html5shim.googlecode.com/svn/trunk/html5.js"</script>
<![endif]-->
如何区分: DOCTYPE声明\新增的结构元素\功能元素
•语义化的理解?
用正确的标签作正确的事情!
html语义化就是让页面的内容结构化,便于对浏览器、搜索引擎解析;
在没有样式CCS状况下也以一种文档格式显示,而且是容易阅读的。
搜索引擎的爬虫依赖于标记来肯定上下文和各个关键字的权重,利于 SEO。
使阅读源代码的人对网站更容易将网站分块,便于阅读维护理解。
•HTML5的离线储存?
localStorage 长期存储数据,浏览器关闭后数据不丢失;
sessionStorage 数据在浏览器关闭后自动删除。
•(写)描述一段语义的html代码吧。
(HTML5中新增长的不少标签(如:<article>、<nav>、<header>和<footer>等)
就是基于语义化设计原则)
< div id="header">
< h1>标题< /h1>
< h2>专一Web前端技术< /h2>
< /div>
•iframe有那些缺点?
*iframe会阻塞主页面的Onload事件;
*iframe和主页面共享链接池,而浏览器对相同域的链接有限制(6-8目前),因此会影响页面的并行加载。
使用iframe以前须要考虑这两个缺点。若是须要使用iframe,最好是经过javascript
动态给iframe添加src属性值,这样能够能够绕开以上两个问题。
•请描述一下 cookies,sessionStorage 和 localStorage 的区别?
cookie在浏览器和服务器间来回传递。 sessionStorage和localStorage不会
sessionStorage和localStorage的存储空间更大;
sessionStorage和localStorage有更多丰富易用的接口;
sessionStorage和localStorage各自独立的存储空间;
CSS
•介绍一下CSS的盒子模型?
(1)有两种, IE 盒子模型、标准 W3C 盒子模型;IE的content部分包含了 border 和 pading;
(2)盒模型: 内容(content)、填充(padding)、边界(margin)、 边框(border).
•CSS 选择符有哪些?哪些属性能够继承?优先级算法如何计算? CSS3新增伪类有那些?
* 1.id选择器( # myid)
2.类选择器(.myclassname)
3.标签选择器(div, h1, p)
4.相邻选择器(h1 + p)
5.子选择器(ul < li)
6.后代选择器(li a)
7.通配符选择器( * )
8.属性选择器(a[rel = "external"])
9.伪类选择器(a: hover, li: nth - child)
* 可继承的样式: font-size font-family color, UL LI DL DD DT;
* 不可继承的样式:border padding margin width height ;
* 优先级就近原则,同权重状况下样式定义最近者为准;
* 载入样式以最后载入的定位为准;
优先级为:
!important > id > class > tag
important 比 内联优先级高
CSS3新增伪类举例:
p:first-of-type 选择属于其父元素的首个 <p> 元素的每一个 <p> 元素。
p:last-of-type 选择属于其父元素的最后 <p> 元素的每一个 <p> 元素。
p:only-of-type 选择属于其父元素惟一的 <p> 元素的每一个 <p> 元素。
p:only-child 选择属于其父元素的惟一子元素的每一个 <p> 元素。
p:nth-child(2) 选择属于其父元素的第二个子元素的每一个 <p> 元素。
:enabled :disabled 控制表单控件的禁用状态。
:checked 单选框或复选框被选中。
•如何居中div?如何居中一个浮动元素?
•给div设置一个宽度,而后添加margin:0 auto属性
- div{
- width:200px;
- margin:0 auto;
- }
•居中一个浮动元素
肯定容器的宽高 宽500 高 300 的层
设置层的外边距
- .div {
- Width:500px ; height:300px;//高度能够不设
- Margin: -150px 0 0 -250px;
- position:relative;相对定位
- //方便看效果
- left:50%;
- top:50%;
- }
•CSS3有哪些新特性?
CSS3实现圆角(border-radius:8px),阴影(box-shadow:10px),
对文字加特效(text-shadow、),线性渐变(gradient),旋转(transform)
transform:rotate(9deg) scale(0.85,0.90) translate(0px,-30px) skew(-9deg,0deg);//旋转,缩放,定位,倾斜
增长了更多的CSS选择器 多背景 rgba
•一个满屏 品 字布局 如何设计?
•常常遇到的CSS的兼容性有哪些?缘由,解决方法是什么?
1. 就是ie6双倍边距的问题,在使用了float的状况下,无论是向左仍是向右都会出现双倍,最简单的解决方法就是用display:inline;加到css里面去。
2. 文字自己的大小不兼容。一样是font-size:14px的宋体文字,在不一样浏览器下占的空间是不同的,ie下实际占高16px,下留白3px,ff下实际占高17px,上留白1px,下留白3px,opera下就更不同了。解决方案:给文字设定 line-height 。确保全部文字都有默认的 line-height 值。这点很重要,在高度上咱们不能容忍1px 的差别。
3. ff下容器高度限定,即容器定义了height以后,容器边框的外形就肯定了,不会被内容撑大,而ie下是会被内容撑大,高度限定失效。因此不要轻易给容器定义height。
4. 还讨论内容撑破容器问题,横向上的。若是float 容器未定义宽度,ff下内容会尽量撑开容器宽度,ie下则会优先考虑内容折行。故,内容可能撑破的浮动容器须要定义width。
5. 浮动的清除,ff下不清除浮动是不行的。
6. mirrormargin bug,当外层元素内有float元素时,外层元素如定义margin-top:14px,将自动生成margin-bottom:14px。padding也会出现相似问题,都是ie6下的特产,该类bug 出现的状况较为复杂,远不仅这一种出现条件,还没系统整理。解决方案:外层元素设定border 或 设定float。
7. 吞吃现象,限于篇幅,我就不展开了。仍是ie6,上下两个div,上面的div设置背景,却发现下面没有设置背景的div 也有了背景,这就是吞吃现象。对应上面的背景吞吃现象,还有滚动下边框缺失的现象。解决方案:使用zoom:1。这个zoom好象是专门为解决ie6 bug而生的。
8. 注释也能产生bug~~~“多出来的一只猪。”这是前人总结这个bug使用的文案,ie6的这个bug 下,你们会在页面看到猪字出现两遍,重复的内容量因注释的多少而变。解决方案:用“<!–[if !IE]> picRotate start <![endif]–>”方法写注释。
9. <li/>里加 float <div/>,这是一个典型的,棘手的兼容问题,但愿引发你们正视 ,给li 不一样的属性会有不一样的解释效果,ff下的解释稍可理解,ie6下的解释会让你摸不着头脑,因为问题的复杂性,将另起一文专门讨论该问题。在《ul使用心得》一文里有相关成果,却没给出问题解决的过程。
10. img下的留白。解决方案:给img设定 display:block。
11. 失去line-height。<div style=”line-height:20px”><img />文字</div>,很遗憾,在ie6下单行文字 line-height 效果消失了。。。,缘由是<img />这个inline-block元素和inline元素写在一块儿了。解决方案:让img 和文字都 float起来。
12. 连接的hover状态。a:hover img{width:300px} 咱们想让鼠标hover时,连接里包含的图片宽度变化,惋惜在ie6下无效,ie七、ff下有效。
13. 非连接的hover状态。div:hover{} 这样的样式ie6是不认的,在ie七、ff下才有效果。
14. ie下overflow:hidden对其下的绝对层position:absolute或者相对层position:relative无效。解决方案:给overflow:hidden加position:relative或者position:absolute。另,ie6支持overflow-x或者overflow-y的特性,ie七、ff不支持。
15. ie6下严重的bug,float元素如没定义宽度,内部若有div定义了height或zoom:1,这个div就会占满一整行,即便你给了宽度。float元素若是做为布局用或复杂的容器,都要给个宽度的。
16. ie6下的bug,绝对定位的div下包含相对定位的div,若是给内层相对定位的div高度height具体值,内层相对层将具备100%的width值,外层绝对层将被撑大。解决方案给内层相对层float属性。
17. ie6下的bug,<head></head>内有<base target=”_blank”/>的状况下,position:relative层下的float层内文字没法选中。
18. 终于来了个ff的缺点。width:100%这个东西在ie里用很方便,会向上逐层搜索width值,忽视浮动层的影响,ff下搜索至浮动层结束,如此,只能给中间的全部浮动层加width:100%才行,累啊。opera这点倒学乖了跟了ie。
•为何要初始化CSS样式。
- 由于浏览器的兼容问题,不一样浏览器对有些标签的默认值是不一样的,若是没对CSS初始化每每会出现浏览器之间的页面显示差别。
- 固然,初始化样式会对SEO有必定的影响,但鱼和熊掌不可兼得,但力求影响最小的状况下初始化。
*最简单的初始化方法就是: * {padding: 0; margin: 0;} (不建议)
淘宝的样式初始化:
- body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, dl, dt, dd, ul, ol, li, pre, form, fieldset, legend, button, input, textarea, th, td { margin:0; padding:0; }
- body, button, input, select, textarea { font:12px/1.5tahoma, arial, \5b8b\4f53; }
- h1, h2, h3, h4, h5, h6{ font-size:100%; }
- address, cite, dfn, em, var { font-style:normal; }
- code, kbd, pre, samp { font-family:couriernew, courier, monospace; }
- small{ font-size:12px; }
- ul, ol { list-style:none; }
- a { text-decoration:none; }
- a:hover { text-decoration:underline; }
- sup { vertical-align:text-top; }
- sub{ vertical-align:text-bottom; }
- legend { color:#000; }
- fieldset, img { border:0; }
- button, input, select, textarea { font-size:100%; }
- table { border-collapse:collapse; border-spacing:0; }
•absolute的containing block计算方式跟正常流有什么不一样?
http://www.w3help.org/zh-cn/kb/008/
•列出display的值,说明他们的做用。position的值, relative和absolute定位原点是?
1.
block 象块类型元素同样显示。
none 缺省值。象行内元素类型同样显示。
inline-block 象行内元素同样显示,但其内容象块类型元素同样显示。
list-item 象块类型元素同样显示,并添加样式列表标记。
值 |
描述 |
none |
此元素不会被显示。 |
block |
此元素将显示为块级元素,此元素先后会带有换行符。 |
inline |
默认。此元素会被显示为内联元素,元素先后没有换行符。 |
inline-block |
行内块元素。(CSS2.1 新增的值) |
list-item |
此元素会做为列表显示。 |
run-in |
此元素会根据上下文做为块级元素或内联元素显示。 |
compact |
CSS 中有值 compact,不过因为缺少普遍支持,已经从 CSS2.1 中删除。 |
marker |
CSS 中有值 marker,不过因为缺少普遍支持,已经从 CSS2.1 中删除。 |
table |
此元素会做为块级表格来显示(相似 <table>),表格先后带有换行符。 |
inline-table |
此元素会做为内联表格来显示(相似 <table>),表格先后没有换行符。 |
table-row-group |
此元素会做为一个或多个行的分组来显示(相似 <tbody>)。 |
table-header-group |
此元素会做为一个或多个行的分组来显示(相似 <thead>)。 |
table-footer-group |
此元素会做为一个或多个行的分组来显示(相似 <tfoot>)。 |
table-row |
此元素会做为一个表格行显示(相似 <tr>)。 |
table-column-group |
此元素会做为一个或多个列的分组来显示(相似 <colgroup>)。 |
table-column |
此元素会做为一个单元格列显示(相似 <col>) |
table-cell |
此元素会做为一个表格单元格显示(相似 <td> 和 <th>) |
table-caption |
此元素会做为一个表格标题显示(相似 <caption>) |
inherit |
规定应该从父元素继承 display 属性的值。 |
2.
值 |
描述 |
absolute |
生成绝对定位的元素,相对于 static 定位之外的第一个父元素进行定位。php 元素的位置经过 "left", "top", "right" 以及 "bottom" 属性进行规定。css |
fixed |
生成绝对定位的元素,相对于浏览器窗口进行定位。html 元素的位置经过 "left", "top", "right" 以及 "bottom" 属性进行规定。前端 |
relative |
生成相对定位的元素,相对于其正常位置进行定位。html5 所以,"left:20" 会向元素的 LEFT 位置添加 20 像素。java |
static |
默认值。没有定位,元素出如今正常的流中(忽略 top, bottom, left, right 或者 z-index 声明)。 |
inherit |
规定应该从父元素继承 position 属性的值。 |
什么是文档流?jquery
将窗体自上而下分红一行行, 并在每行中按从左至右的顺序排放元素,即为文档流。git
只有三种状况会使得元素脱离文档流,分别是:浮动、绝对定位和相对定位。程序员
使用absoulte或fixed定位的话,必须指定 left、right、 top、 bottom 属性中的至少一个,不然left/right/top/bottom属性会使用它们的默认值 auto ,这将致使对象听从正常的HTML布局规则,在前一个对象以后当即被呈递,简单讲就是都变成relative,会占用文档空间,这点很是重要,不少人使用absolute定位后发现没有脱离文档流就是这个缘由。
•position跟display、margin collapse、overflow、float这些特性相互叠加后会怎么样?
position控制元素是否在文档流中,static和relative都存在于文档流,fixed直接脱离文档流锁定在以整个文档为offsetParent的位置,而absolute也是直接脱离文档流锁定在最近的一个有position属性的parent的位置上。
display控制布局方式,block以block方式布局,inline以inline方式布局,inline-block以inline-block方式布局,而全部的布局方式的前提是元素在文档流当中,因此若是position设置为脱离文档流,display就只影响子元素的布局了。display:none直接让元素脱离文档流同样的布局方式。
margin collapse也是在文档流时才会有效。
overflow指的是当超出布局边界时的显示效果,跟怎么布局不要紧。
float也是直接脱离文档流了。
margin collapse在position跟display、overflow、float下是怎么展示的?'display'、'position' 和 'float' 的相互关系。
两个或多个毗邻的普通流中的块元素垂直方向上的 margin 会折叠
浮动元素、inline-block 元素、绝对定位元素的 margin 不会和垂直方向上其余元素的 margin 折叠
建立了块级格式化上下文的元素,不和它的子元素发生 margin 折叠
元素自身的 margin-bottom 和 margin-top 相邻时也会折叠
http://www.w3cplus.com/css/understanding-bfc-and-margin-collapse.html
http://www.w3help.org/zh-cn/kb/006/
•对BFC规范的理解?
(W3C CSS 2.1 规范中的一个概念,它决定了元素如何对其内容进行定位,以及与其余元素的关系和相互做用。)
什么是BFC(Block Formatting Context),简单讲,它是提供了一个独立布局的环境,每一个BFC都遵照同一套布局规则。例如,在同一个BFC内,盒子会一个挨着一个的排,相邻盒子的间距是由margin决定且垂直方向的margin会重叠。而float和clear float也只对同一个BFC内的元素有效。
浮动元素和绝对定位元素,非块级盒子的块级容器(例如 inline-blocks, table-cells, 和 table-captions),以及overflow值不为“visiable”的块级盒子,都会为他们的内容建立新的BFC(块级格式上下文)。在BFC中,盒子从顶端开始垂直地一个接一个地排列,两个盒子之间的垂直的间隙是由他们的margin 值所决定的。在一个BFC中,两个相邻的块级盒子的垂直外边距会产生折叠。在BFC中,每个盒子的左外边缘(margin-left)会触碰到容器的左边缘(border-left)(对于从右到左的格式来讲,则触碰到右边缘)。
•css定义的权重
如下是权重的规则:标签的权重为1,class的权重为10,id的权重为100,如下例子是演示各类定义的权重值:
- /*权重为1*/
- div{
- }
- /*权重为10*/
- .class1{
- }
- /*权重为100*/
- #id1{
- }
- /*权重为100+1=101*/
- #id1 div{
- }
- /*权重为10+1=11*/
- .class1 div{
- }
- /*权重为10+10+1=21*/
- .class1 .class2 div{
- }
若是权重相同,则最后定义的样式会起做用,可是应该避免这种状况出现
•解释下浮动和它的工做原理?清除浮动的技巧
浮动元素脱离文档流,不占据文档空间。 浮动"从流程中被移除出来", 可是与绝对位置的元素(层次)不一样,浮动是在他们前面的最后一个块元素以后直接被显示出来(就像块盒同样)。若是该浮动是在一个“行块”中,该浮动的上边界被放置在行块顶部的水平上。当除此之外,浮动与绝对元素类似,原先的块盒会彻底忽略浮动和AP元素。那些静态的块盒知识保持一个接一个地”跟随“,就好像没有浮动不在那里同样。
1.使用空标签清除浮动。
这种方法是在全部浮动标签后面添加一个空标签 定义css clear:both. 弊端就是增长了无心义标签。
2.使用overflow。
给包含浮动元素的父标签添加css属性 overflow:auto; zoom:1; zoom:1用于兼容IE6。
3.使用after伪对象清除浮动。 #layout:after{display:block;clear:both;content:”";visibility:hidden;height:0;}
咱们将现有已知的清楚浮动元素方法罗列下:
- 采用一个HTML标签,以及css的clear属性,来手工清理浮动;
- 采用伪类:after,动态创建一个块元素,设定 clear 属性,清理以前的浮动元素;
- 采用CSS overflow 非 visible 值(overflow:auto/overflow:hidden)设定使父容器包含浮动元素;
- 采用display:table/display:table-cell 等table系列属性将父元素变成 table 形式自动包含浮动元素;
- 使用 TABLE 以及 TD 标签做为浮动元素容器;
- 采用 float:left/float:right 方式将父元素一样浮动,就能够包含浮动内容;
- 在 IE 6/7 的标准文档模式中设置 “width/height/zoom” 等样式来自动清理浮动。
•用过媒体查询,针对移动端的布局吗?
•使用 CSS 预处理器吗?喜欢那个?
Sass、LESS和Stylus
JavaScript
•JavaScript原型,原型链 ? 有什么特色?
构造函数,原型对象,实例的关系是:JavaScript中,每一个函数都有一个prototype属性,这是一个指针,指向了这个函数的原型对象。这个对象包含这个函数建立的实例的共享属性和方法。也就是说原型对象中的属性和方法是全部实例共享。而这个原型对象有一个constructor属性,指向了该构造函数。每一个经过该构造函数建立的对象都包含一个指向原型对象的内部指针__proto__。 原型链做为实现继承的主要方法,其基本思想是:让原型对象等于另外一个类型的实例,这样原型对象将包含一个指向另外一个原型的指针,相应的,另外一个原型中也包含着一个指向另外一个构造函数的指针,假如另外一个原型又是另外一个类型的实例,如此层层递进,就构成了实例与原型的链条,这个链条就称之为
原型链.
•eval是作什么的?
它的功能是把对应的字符串解析成JS代码并运行;
应该避免使用eval,不安全,很是耗性能(2次,一次解析成js语句,一次执行)。
•null,undefined 的区别?
null
这是一个对象,可是为空。由于是对象,因此 typeof null 返回 'object' 。
null 是 JavaScript 保留关键字。
null 参与数值运算时其值会自动转换为 0 ,所以,下列表达式计算后会获得正确的数值:
表达式:123 + null 结果值:123
表达式:123 * null 结果值:0
undefined
undefined是全局对象(window)的一个特殊属性,其值是未定义的。但 typeof undefined 返回 'undefined' 。
虽然undefined是有特殊含义的,但它确实是一个属性,并且是全局对象(window)的属性。请看下面的代码:
alert('undefined' in window); //输出:true
var anObj = {};
alert('undefined' in anObj); //输出:false
从中能够看出,undefined是window对象的一个属性,但却不是anObj对象的一个属性。
•写一个通用的事件侦听器函数。
- // event(事件)工具集,来源:github.com/markyun
- markyun.Event = {
- // 页面加载完成后
- readyEvent : function(fn) {
- if (fn==null) {
- fn=document;
- }
- var oldonload = window.onload;
- if (typeof window.onload != 'function') {
- window.onload = fn;
- } else {
- window.onload = function() {
- oldonload();
- fn();
- };
- }
- },
- // 视能力分别使用dom0||dom2||IE方式 来绑定事件
- // 参数: 操做的元素,事件名称 ,事件处理程序
- addEvent : function(element, type, handler) {
- if (element.addEventListener) {
- //事件类型、须要执行的函数、是否捕捉
- element.addEventListener(type, handler, false);
- } else if (element.attachEvent) {
- element.attachEvent('on' + type, function() {
- handler.call(element);
- });
- } else {
- element['on' + type] = handler;
- }
- },
- // 移除事件
- removeEvent : function(element, type, handler) {
- if (element.removeEnentListener) {
- element.removeEnentListener(type, handler, false);
- } else if (element.datachEvent) {
- element.detachEvent('on' + type, handler);
- } else {
- element['on' + type] = null;
- }
- },
- // 阻止事件 (主要是事件冒泡,由于IE不支持事件捕获)
- stopPropagation : function(ev) {
- if (ev.stopPropagation) {
- ev.stopPropagation();
- } else {
- ev.cancelBubble = true;
- }
- },
- // 取消事件的默认行为
- preventDefault : function(event) {
- if (event.preventDefault) {
- event.preventDefault();
- } else {
- event.returnValue = false;
- }
- },
- // 获取事件目标
- getTarget : function(event) {
- return event.target || event.srcElement;
- },
- // 获取event对象的引用,取到事件的全部信息,确保随时能使用event;
- getEvent : function(e) {
- var ev = e || window.event;
- if (!ev) {
- var c = this.getEvent.caller;
- while (c) {
- ev = c.arguments[0];
- if (ev && Event == ev.constructor) {
- break;
- }
- c = c.caller;
- }
- }
- return ev;
- }
- };
•Node.js的适用场景?
高并发、聊天、实时消息推送
•介绍js的基本数据类型。
number,string,boolean,object,undefined
•Javascript如何实现继承?
经过原型和构造器
•["1", "2", "3"].map(parseInt) 答案是多少?
[1, NaN, NaN] 由于 parseInt 须要两个参数 (val, radix) 但 map 传了 3 个 (element, index, array)
•如何建立一个对象? (画出此对象的内存图)
- function Person(name, age) {
- this.name = name;
- this.age = age;
- this.sing = function() { alert(this.name) }
- }
•谈谈This对象的理解。
this是js的一个关键字,随着函数使用场合不一样,this的值会发生变化。
可是有一个总原则,那就是this指的是调用函数的那个对象。
this通常状况下:是全局对象Global。 做为方法调用,那么this就是指这个对象
•事件是?IE与火狐的事件机制有什么区别? 如何阻止冒泡?
1. 咱们在网页中的某个操做(有的操做对应多个事件)。例如:当咱们点击一个按钮就会产生一个事件。是能够被 JavaScript 侦测到的行为。
2. 事件处理机制:IE是事件冒泡、火狐是 事件捕获;
3. ev.stopPropagation();
•什么是闭包(closure),为何要用它?
执行say667()后,say667()闭包内部变量会存在,而闭包内部函数的内部变量不会存在.使得Javascript的垃圾回收机制GC不会收回say667()所占用的资源,由于say667()的内部函数的执行须要依赖say667()中的变量。这是对闭包做用的很是直白的描述.
- function say667() {
- // Local variable that ends up within closure
- var num = 666;
- var sayAlert = function() { alert(num); }
- num++;
- return sayAlert;
- }
- var sayAlert = say667();
- sayAlert()//执行结果应该弹出的667
所谓“闭包”,就是在构造函数体内定义另外的函数做为目标对象的方法函数,而这个对象的方法函数反过来引用外层函数体中的临时变量。这使得只要目标对象在生存期内始终能保持其方法,就能间接保持原构造函数体当时用到的临时变量值。尽管最开始的构造函数调用已经结束,临时变量的名称也都消失了,但在目标对象的方法内却始终能引用到该变量的值,并且该值只能通这种方法来访问。即便再次调用相同的构造函数,但只会生成新对象和方法,新的临时变量只是对应新的值,和上次那次调用的是各自独立的。
•"use strict";是什么意思 ? 使用它的好处和坏处分别是什么?
使用"use strict"指令的目的是说明(脚本或函数中)后续的代码将会解析为严格代码(strict code)。若是顶层(不存在任何函数内的)代码使用了"use strict"指令,那么它们就是严格代码。若是在函数体内定义,则函数总体使用的是严格代码。严格代码和非严格代码之间的区别以下:
1)在严格模式中禁止使用with语句;
2)在严格模式中,全部变量都要先声明,若是给一个未声明的变量、函数、函数参数,catch从句参数或全局对象的属性赋值,将会throw一个引用错误(在非严格模式下,这种隐式声明的全局变量的方法是给全局对象添加一个新属性)
3)在严格模式中,调用的函数(不是方法)中的一个this值是undefined。(在非严格模式下,调用函数中的this值老是全局对象)。能够利用这种特性来判断js实现是否支持严格模式。
4)一样,在严格模式中,当经过call()或apply()来调用函数时,其中的this值就是经过call()或apply()传入的第一个参数(在非严格模式下,null和undefined值被全局对象和转换为对象的非对象值所代替)
5)在严格模式下,给只读属性赋值和给不可扩展的对象建立新成员都将抛出一个类型错误异常(在非严格模式下,这些操做只是简单的操做失败,不会抛错)
6)在严格模式下,传入eval_r()的代码不能在调用程序所在的上下文中声明变量或定义函数,而在非严格模式中是能够这样的。相反,变量和函数定义是在eval_r()建立的新做用域中,这个做用域在eval_r()返回时就弃用了。
严格模式的一大目标是让你能更快更方便的调试.strict模式会让你面临因为第三方代码没有为严格模式作好准备而引起的问题。 在严格模式中,标识符eval和arguments看成关键字,它们的值是不能更改的。严格模式中限制了对调用栈的检测能力,在严格模式的函数中,arguments.caller和arguments.callee都会抛出一个类型错误异常。
•如何判断一个对象是否属于某个类?
使用instanceof (待完善)
if(a instanceof Person){
alert('yes');
}
•new操做符具体干了什么呢?
一、建立一个空对象,而且 this 变量引用该对象,同时还继承了该函数的原型。
二、属性和方法被加入到 this 引用的对象中。
三、新建立的对象由 this 所引用,而且最后隐式的返回 this 。
var obj = {};
obj.__proto__ = Base.prototype;
Base.call(obj);
•Javascript中,有一个函数,执行时对象查找时,永远不会去查找原型,这个函数是?
hasOwnProperty
•JSON 的了解?
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。
它是基于JavaScript的一个子集。数据格式简单, 易于读写, 占用带宽小
{'age':'12', 'name':'back'}
•js延迟加载的方式有哪些?
defer和async、动态建立DOM方式(用得最多)、按需异步载入js
•ajax 是什么?
•同步和异步的区别?
•如何解决跨域问题?
jsonp、 iframe、window.name、window.postMessage、服务器上设置代理页面
JSONP的最基本的原理是:动态添加一个<script>标签,而script标签的src属性是没有跨域的限制的。这样说来,这种跨域方式其实与ajax XmlHttpRequest协议无关了。
建立一个回调函数,而后在远程服务上调用这个函数而且将
JSON
数据形式做为参数传递,完成回调。也就是将你本身在客户端定义的回调函数的函数名传送给服务端,服务端则会返回以你定义的回调函数名的方法,将获取的json数据传入这个方法完成回调。
•模块化怎么作?
当即执行函数,不暴露私有成员
- var module1 = (function(){
- var _count = 0;
- var m1 = function(){
- //...
- };
- var m2 = function(){
- //...
- };
- return {
- m1 : m1,
- m2 : m2
- };
- })();
•AMD(Modules/Asynchronous-Definition)、CMD(Common Module Definition)规范区别?
1. 对于依赖的模块,AMD 是
提早执行,CMD 是
延迟执行。不过 RequireJS 从 2.0 开始,也改为能够延迟执行(根据写法不一样,处理方式不一样)。CMD 推崇 as lazy as possible.
2. CMD 推崇
依赖就近,AMD 推崇
依赖前置。看代码:
// CMD
define(function(require, exports, module) {
var a = require('./a')
a.doSomething()
// 此处略去 100 行
var b = require('./b') // 依赖能够就近书写
b.doSomething()
// ...
})
// AMD 默认推荐的是
define(['./a', './b'], function(a, b) { // 依赖必须一开始就写好
a.doSomething()
// 此处略去 100 行
b.doSomething()
...
})
虽然 AMD 也支持 CMD 的写法,同时还支持将 require 做为依赖项传递,但 RequireJS 的做者默认是最喜欢上面的写法,也是官方文档里默认的模块定义写法。
3. AMD 的 API 默认是
一个当多个用,CMD 的 API 严格区分,推崇
职责单一。好比 AMD 里,require 分全局 require 和局部 require,都叫 require。CMD 里,没有全局 require,而是根据模块系统的完备性,提供 seajs.use 来实现模块系统的加载启动。CMD 里,每一个 API 都
简单纯粹。
•异步加载的方式有哪些?
(1) defer,只支持IE
(2) async:
(3) 建立script,插入到DOM中,加载完毕后callBack
http://www.cnblogs.com/tiwlin/archive/2011/12/26/2302554.html
•documen.write和 innerHTML的区别
document.write只能重绘整个页面
innerHTML能够重绘页面的一部分
•.call() 和 .apply() 的区别?
例子中用 add 来替换 sub,add.call(sub,3,1) == add(3,1) ,因此运行结果为:alert(4);
注意:js 中的函数实际上是对象,函数名是对 Function 对象的引用。
- function add(a,b)
- {
- alert(a+b);
- }
- function sub(a,b)
- {
- alert(a-b);
- }
- add.call(sub,3,1);
•Jquery与jQuery UI 有啥区别?
*jQuery是一个js库,主要提供的功能是选择器,属性修改和事件绑定等等。
*jQuery UI则是在jQuery的基础上,利用jQuery的扩展性,设计的插件。
提供了一些经常使用的界面元素,诸如对话框、拖动行为、改变大小行为等等
•JQuery的源码看过吗?能不能简单说一下它的实现原理?
1 var jQuery = function() {
3 // 返回选择器实例
4 return new jQuery.prototype.init();
5 };
6 jQuery.prototype = {
8 // 选择器构造函数
9 init: function() {
11 },
13 // 原型方法
14 toArray: function() {
16 },
17 get: function() {
19 }
20 };
22 // 共享原型
23 jQuery.prototype.init.prototype = jQuery.prototype;
$(xx)或Jquery(xx)获得不是真正的jQuery函数生成的对象,而是jQuery.fn.init函数生成的对象。也是就是jQuery的对象继承的是jQuery.fn.init的原型。 jQuery.fn = jQuery.prototype={..}。咱们基本上不用new jQuery(xx),而是直接jQuery(xx),先生成jQuery函数的对象,把原型中的继承下来,返回的也是jQuery.fn.init函数生成的对象。
•jquery 中如何将数组转化为json字符串,而后再转化回来?
jQuery中没有提供这个功能,因此你须要先编写两个jQuery的扩展:
- $.fn.stringifyArray = function(array) {
- return JSON.stringify(array)
- }
- $.fn.parseArray = function(array) {
- return JSON.parse(array)
- }
而后调用:
- $("").stringifyArray(array)
•针对 jQuery 的优化方法?
*基于Class的选择性的性能相对于Id选择器开销很大,由于需遍历全部DOM元素。
*频繁操做的DOM,先缓存起来再操做。用Jquery的链式调用更好。
好比:var str=$("a").attr("href");
*for (var i = size; i < arr.length; i++) {}
for 循环每一次循环都查找了数组 (arr) 的.length 属性,在开始循环的时候设置一个变量来存储这个数字,可让循环跑得更快:
for (var i = size, length = arr.length; i < length; i++) {}
•JavaScript中的做用域与变量声明提高?
“一个变量的做用域表示这个变量存在的上下文。它指定了你能够访问哪些变量以及你是否有权限访问某个变量。”变量做用域分为局部做用域和全局做用域。
javascript没有块级做用域(被花括号包围的);当是,javascript有拥有函数级别的做用域,也就是说,在一个函数内定义的变量只能在函数内部访问或者这个函数内部的函数访问(闭包除外)。
•如何编写高性能的Javascript?
•那些操做会形成内存泄漏?
内存泄漏指任何对象在您再也不拥有或须要它以后仍然存在。
垃圾回收器按期扫描对象,并计算引用了每一个对象的其余对象的数量。若是一个对象的引用数量为 0(没有其余对象引用过该对象),或对该对象的唯一引用是循环的,那么该对象的内存便可回收。
setTimeout 的第一个参数使用字符串而非函数的话,会引起内存泄漏。
闭包、控制台日志、循环(在两个对象彼此引用且彼此保留时,就会产生一个循环)
•JQuery一个对象能够同时绑定多个事件,这是如何实现的?
•对Node的优势和缺点提出了本身的见解?
*(优势)由于Node是基于事件驱动和无阻塞的,因此很是适合处理并发请求, 所以构建在Node上的代理服务器相比其余技术实现(如Ruby)的服务器表现要好得多。 此外,与Node代理服务器交互的客户端代码是由javascript语言编写的, 所以客户端和服务器端都用同一种语言编写,这是很是美妙的事情。*(缺点)Node是一个相对新的开源项目,因此不太稳定,它老是一直在变, 并且缺乏足够多的第三方库支持。看起来,就像是Ruby/Rails当年的样子。
其余问题
- 你遇到过比较难的技术问题是?你是如何解决的?
- 常使用的库有哪些?经常使用的前端开发工具?开发过什么应用或组件?
- 页面重构怎么操做?
- 列举IE 与其余浏览器不同的特性?
- 99%的网站都须要被重构是那本书上写的?
- 什么叫优雅降级和渐进加强?
- WEB应用从服务器主动推送Data到客户端有那些方式?
- 你有哪些性能优化的方法?
(看雅虎14条性能优化原则)。 (1) 减小http请求次数:CSS Sprites, JS、CSS源码压缩、图片大小控制合适;网页Gzip,CDN托管,data缓存 ,图片服务器。 (2) 前端模板 JS+数据,减小因为HTML标签致使的带宽浪费,前端用变量保存AJAX请求结果,每次操做本地变量,不用请求,减小请求次数 (3) 用innerHTML代替DOM操做,减小DOM操做次数,优化javascript性能。 (4) 当须要设置的样式不少时设置className而不是直接操做style。 (5) 少用全局变量、缓存DOM节点查找的结果。减小IO读取操做。 (6) 避免使用CSS Expression(css表达式)又称Dynamic properties(动态属性)。 (7) 图片预加载,将样式表放在顶部,将脚本放在底部 加上时间戳。 (8) 避免在页面的主体布局中使用table,table要等其中的内容彻底下载以后才会显示出来,显示比div+css布局慢。
- http状态码有那些?分别表明是什么意思?
100-199 用于指定客户端应相应的某些动做。 200-299 用于表示请求成功。 300-399 用于已经移动的文件而且常被包含在定位头信息中指定新的地址信息。 400-499 用于指出客户端的错误。400 一、语义有误,当前请求没法被服务器理解。401 当前请求须要用户验证 403 服务器已经理解请求,可是拒绝执行它。500-599 用于支持服务器错误。 503 – 服务不可用
- 一个页面从输入 URL 到页面加载显示完成,这个过程当中都发生了什么?(流程说的越详细越好)
查找浏览器缓存 DNS解析、查找该域名对应的IP地址、重定向(301)、发出第二个GET请求 进行HTTP协议会话 客户端发送报头(请求报头) 服务器回馈报头(响应报头) html文档开始下载 文档树创建,根据标记请求所需指定MIME类型的文件 文件显示 [ 浏览器这边作的工做大体分为如下几步: 加载:根据请求的URL进行域名解析,向服务器发起请求,接收文件(HTML、JS、CSS、图象等)。 解析:对加载到的资源(HTML、JS、CSS等)进行语法解析,建议相应的内部数据结构(好比HTML的DOM树,JS的(对象)属性表,CSS的样式规则等等) }
- 除了前端之外还了解什么其它技术么?你最最厉害的技能是什么?
- 你经常使用的开发工具是什么,为何?
- 对前端界面工程师这个职位是怎么样理解的?它的前景会怎么样?
前端是最贴近用户的程序员,比后端、数据库、产品经理、运营、安全都近。 一、实现界面交互 二、提高用户体验 三、有了Node.js,前端能够实现服务端的一些事情前端是最贴近用户的程序员,前端的能力就是能让产品从 90分进化到 100 分,甚至更好, 参与项目,快速高质量完成实现效果图,精确到1px; 与团队成员,UI设计,产品经理的沟通; 作好的页面结构,页面重构和用户体验; 处理hack,兼容、写出优美的代码格式; 针对服务器的优化、拥抱最新前端技术。
- 加班的见解?
加班就像借钱,原则应当是------救急不救穷
- 平时如何管理你的项目?
先期团队必须肯定好全局样式(globe.css),编码模式(utf-8) 等 编写习惯必须一致(例如都是采用继承式的写法,单样式都写成一行); 标注样式编写人,各模块都及时标注(标注关键样式调用的地方); 页面进行标注(例如 页面 模块 开始和结束); CSS跟HTML 分文件夹并行存放,命名都得统一(例如style.css) JS 分文件夹存放 命民以该JS 功能为准英文翻译; 图片采用整合的 images.png png8 格式文件使用 尽可能整合在一块儿使用方便未来的管理
- 如何设计突发大规模并发架构?
- 说说最近最流行的一些东西吧?常去哪些网站?
Node.js、Mongodb、npm、MVVM、MEAN、three.js
- 移动端(Android IOS)怎么作好用户体验?
清晰的视觉纵线、信息的分组、极致的减法、 利用选择代替输入、标签及文字的排布方式、 依靠明文确认密码、合理的键盘利用、
- 你在如今的团队处于什么样的角色,起到了什么明显的做用?
- 你认为怎样才是全端工程师(Full Stack developer)?
- 介绍一个你最得意的做品吧?
- 你的优势是什么?缺点是什么?
- 如何管理前端团队?
- 最近在学什么?能谈谈你将来3,5年给本身的规划吗?
- 想问公司的问题? 问公司问题: 目前关注哪些最新的Web前端技术(将来的发展方向)? 前端团队如何工做的(实现一个产品的流程)? 公司的薪资结构是什么样子的?