前端是后端服务与人机界面的连接器
技术栈拆解

1.开发网站

结构(Structure)、表现(Presentation)和行为(Behavior)
对应的标准也分三方面:结构化标准语言主要包括XHTML和XML,表现标准语言主要包括CSS,行为标准主要包括对象模型(如 W3C DOM)、ECMAScript等。
逐步强化你的网站功能,同时对支持性进行测试。运用“渐进增强”和“平稳退化”原则开发网站。

2.可用性和可维护性

在Web前端开发界,有三个词经常被提及:可用性(Usability)、可访问性(Accessibility)和可维护性(Maintainability)。
可用性指的是:产品是否容易上手,用户能否完成任务,效率如何,以及这过程中用户的主观感受可好,是从用户的角度来看产品的质量。可用性好意味着产品质量高,是企业的核心竞争力。
可维护性一般包含两个层次,一是当系统出现问题时,快速定位并解决问题的成本,成本低则可维护性好。二是代码是否容易被人理解,是否容易修改和增强功能。可维护性和可复用性、可扩展性等有交叉的地方。构建可维护性好的代码,对企业的长期发展非常重要。
可用性和可维护性定义比较清晰,在软件界研究也非常多,在此不展开讨论。我们来看看可访问性。

3.可访问性

什么是可访问性?很难给出严格的定义。在《Web Content Accessibility Guidelines 1.0(Web内容可访问性指南)》里,对可访问性的描述是:Web内容对于残障用户的可阅读和可理解性。同时指南里还特别指明:提高可访问性也能让普通用户更容易理解Web内容。具体而言,要考虑以下两方面:
无论用户是否残障,都得通过用户代理(User Agent)来访问Web内容。因此要提高可访问性,首先得考虑各种用户代理 :桌面浏览器、语音浏览器、移动电话、车载个人电脑等等。在Google, 专门聘请了一些残障雇员,来帮助提高产品的可访问性。还得考虑用户访问Web内容时的环境限制 。比如:嘈杂的环境、过暗或过亮的房间、或者是免提等各种情况。这是更高一层次的可访问性要求,做到了,能造就产品在特定领域的核心竞争力。理解以上两点,能解答不少疑惑。比如Web开发社区经常讨论的话题:我们真的要考虑浏览器禁用JavaScript/CSS的情形吗?我的理解是,要考虑的其实不是禁用了JavaScript/CSS的浏览器,而是那些对JavaScript/CSS不支持或支持不好的用户代理。比如语音阅读器,手机浏览器等,JavaScript提供的是一层可访问性,不能代替内容本身。当然,从渐进增强的角度讲,鼓励使用高级特性,只是同时要做到优雅降级,让低端用户代理上,也能保留低保真的体验。
理解可访问性,同时能有助于更好地理解语义的重要性。为何要看重em和strong的区别?因为在语音阅读器上,对这两个标签的理解是不一样的,错误使用会导致语调的错误变化和重音的位置不对。这对盲人用户来说,是极大的不尊重。
关注可访问性,是网络上的尊老爱幼,体现的是前端开发工程师对社会的道义感和关爱度.

position有哪些值?有什么作用?

static。默认值,不脱离文档流,top,right,bottom,left等属性不生效。
relative。不脱离文档流,依据自身位置进行偏离,当子元素设置absolute,将依据它进行偏离。
absolute。脱离文档流,依据top,right,bottom,left等属性在正常文档流中偏移位置。
fixed。通过浏览器窗口进行定位,出现滚动条的时候,不会随之滚动。

Q:如何实现一个闭包?闭包的作用有哪些?

在一个函数里面嵌套另一个函数,被嵌套的那个函数的作用域是一个闭包。

作用:创建私有变量,减少全局变量,防止变量名污染。可以操作外部作用域的变量,变量不会被浏览器回收,保存变量的值。

Q:请描述一下Promise的使用场景,'Promise'它所解决的问题以及现在对于异步操作的解决方案。

这是一道笔试题,这是我当时的回答。
Promise的使用场景:ajax请求,回调函数,复杂操作判断。
Promise是ES6为了解决异步编程所诞生的。
异步操作解决方案:Promise、Generator、定时器(不知道算不算)、还有ES7的async

split()、join()的区别?

split()是将字符分割成一个数组,join()将数组转为一个字符串

权重的五个等级及其权重

!important;
行内样式1000;
ID选择器, 权重:100;
class,属性选择器和伪类选择器,权重:10;
属性选择器指的是:根据元素的属性及属性值来选择元素,比如button的type属性等。伪类选择器: :active :focus等选项.
标签选择器和伪元素选择器,权重:1;
伪元素选择器: :before :after

闭包的作用

	作用1. 使用函数内部的变量在函数执行完后, 仍然存活在内存中(延长了局部变量的生命周期)
	作用2. 让函数外部可以操作(读写)到函数内部的数据(变量/函数)

XSS防御

	比较常用的做法是,通过第一步的编码转成文本,然后第三步转成DOM对象,然后经过第二步的过滤。
	还有一种简洁的答案:
首先是encode,如果是富文本,就白名单。

提升页面性能优化:

	1、资源压缩合并,减少http请求
	2、非核心代码异步加载 —> 异步加载的方式 —> 异步加载的区别
    如果回答出非核心代码异步加载,就会层层深入。
	3、利用浏览器缓存 —> 缓存的分类 —> 缓存的原理
	缓存是所有性能优化的方式中最重要的一步,这个一定要答好。【重要】
	有的人可能会回答local storage 和session storage,其实不是这个。浏览器缓存和存储不是一回事。
	4、使用CDN
	浏览器第一次打开页面时,缓存是起不了作用的。CDN这一条,一定要说出来。
	5、DNS预解析