回流
当 Render Tree 中的一部分节点因为元素的尺寸大小, 布局, 隐藏 / 显示的切换等改变时, 需要对 DOM Tree 进行重新的构建的, 这就是回流.
重绘
当 Render Tree 中的一些元素需要更新部分属性, 并且这些属性只是影响元素的外观显示, 不影响布局的时候, 就是重绘.
如果有想学习编程的初学者, 可来我们的前端直播授课群的哦: 733395506 里面免费送整套系统的前端教程
为什么要用 Sass/Less/Stylus ?
这些 CSS 预处理语言可以让 CSS 具有一定的编程风格, 在我实际的开发体验中给我带来了许多便捷的地方, 并且使用他们更有利于项目的后期维护.
可以定义变量, 这对于设置很多重复性颜色来说真的太方便了
可以嵌套式的书写 (仁者见仁智者见智吧), 我更喜欢 Stylus 的书写方式
提高了样式的复用性, 避免重复书写许多公共样式
可以定义一些函数, 这在移动端开发方面可以做媒体查询, 适配等工作
html5/CSS3 新特性
简单回答了几个, 不是太全面
HTML5
更多的语义化标签 (header/nav/footer/section...)
音频, 视频 API
- Canvas
- webSocket
- localStorage/sessionStorage
- CSS3
新的选择器 (属性, 伪类, 伪元素)
颜色新增 RGBA/HSLA 模式
过渡效果: transition, 可实现动画效果
自定义动画
媒体查询
盒子模型
JavaScript 相关
谈一谈原型和原型链
首先, 解释一下什么是原型:
每一个 JS 对象在被创建的时候, 就会与之关联另一个对象, 这个对象就是我们所说的原型, 每一个对象都会从原型上继承属性
每一个 JS 对象在被创建的时候, 都具有一个属性:__proto__ , 这个属性会指向该对象的原型. 要知道, 原型也是一个对象 , 既然这样, 那么他的__proto__ 指向 Object 的 Object 的原型
那么, Obeject 的原型的原型是什么?
答案应是: null
无法再往上层进行查找... 这样通过__proto__ 向上一直查找所形成的链式结构, 就是原型链.
浅克隆和深克隆
什么是浅克隆? 什么是深克隆?
浅克隆中原始类型为值传递, 对象类型仍未引用传递; 深克隆中所有元素或者属性都可以进行完全的复制, 生成一个与原对象完全不相干的对象, 也就是新对象中的所有修改都不会在原对象中有所表现.
如何实现浅克隆?
JS 内部实现了浅拷贝 Object.assign() , 第一个参数是最终复制的目标对象, 后面的所有参数是我们即将复制的原对象.(该方法适用于数组或者对象)
varnewObj =Object.assign({},obj)
原生 JS 实现
functionshallowCopy(source) {letnewSource = {};for(iteminsource) {if(source.hasOwnProperty(key)) { newSource[key] =source[key]; } }returnnewSource;}
如何实现深克隆?
使用 JSON 序列化
newSource =JSON.parse(JSON.stringfy(source))
但是该方法有一点的缺陷:
undefinedsymbol
三方类库, 类似 lodash 的_.cloneDeep()
自己手动实现 (简易版)
functiondeepClone(source) {if(typeofsource!=='object') {return'不是对象'; }letisArray = Array.isArray(source)letnewSource = isArray ? [] : {}for(letkeyinsource) {if(typeofsource[key] !=='object') { newSource[key] =source[key] }else{ newSource[key] = deepClone(source[key]) } }returnnewSource}
来源: http://www.jianshu.com/p/04ba82d9c01f