无标题文章
## 知识点
1. 算法
基本的排序算法,时间复杂度
2. 数据结构
链表,查找,插入;平衡二插树,红黑树
2. 网络
TCP/IP,HTTP,HTTPS
3. 项目
项目要精心准备,要好好添油加醋,丰富项目内容,但要有限度
4. 前端
1. 跨域,浏览器的同源策略,以及跨域请求的方法(jsonp)
2. 闭包,相应的设计模式,单例模式
3. {}=={} []==[] null==undefined,js中的基本数据类型,字面值和复杂值
4. 布局,圣杯布局,两列自适应布局
5. !important 网站的性能优化
6. 手写jquey插件,在jquery方法和原型上面添加方法的区别和实现($.extend,$.fn.extend),以及jquery对象的实现(return new jQuery.fn.init)
7. arguments.callee,以及arguments解释
8. 前端路由,前后端分离
9. ES6,promise等新的特性
10. webpack和gulp和requirejs
11. vue和react异同点与优势
12. CSS实现三角形,理解[http://codepen.io/qizi/pen/KgbNjN](http://codepen.io/qizi/pen/KgbNjN)的原理
13. 原生函数的使用,ajax
14. 模块加载
15. 原生dom
16. js事件处理
17. 原型链,原型继承和类继承
18. margin重叠
19. [Cookie](https://segmentfault.com/a/1190000004556040)
20. 外部引用CSS中 link与@import的区别
## 总结
1. 设计模式
> 设计模式是在经验中总结出来的可复用的可维护的代码框架,即使没有刻意在代码中使用设计模式,也可能在不经意中使用。
设计模式即是找出程序中变化的地方,并将变化封装起来。JS中的设计模式中不同的是原型继承,所有数据都是对象,通过克隆对象,
来进行实例化,并通过原型链进行查找。
+ 原型模式
**原型继承的本质:**
构造器将原型复制在实例对象上,但这种复制是读遍历。
一般有三种情况:
+ 构造复制:
从原型中复制出新的实例对象,与原型占用相同的内存空间。
+ 写时复制:
先不复制,只是链接到原型的地址,读取时直接通过链接读取。
当需要写入原型对象时,再将原型进行复制
+ 读遍历:
当需要写入原型对象时,只把要写入对象的成员复制到新的内存空间
> **注意\__proto\__与prototype的区别:\__proto\__是链接,prototype是原型对象**
```javascript
var obj1 = new Object();
var obj2 = {};
Object.getPrototypeOf(obj1) === Object.prototype;//true
Object.getPrototypeOf(obj2) === Object.prototype;//true
```
> **只有null是没有原型的对象,Object.prototype的原型是null,可通过Object.create(null)创建没有原型的对象**
但是`Object.__proto__ != null`,在chrome中
```javascript
Object.__proto__ //[[Function]]
Object.__proto__ === Function.prototype //true
Function.__proto__ == Function.prototype //true
Object.__proto__ === null //false
```
基本函数类型的原型都链接到了Function.prototype,因为这些都是构造函数吧。Function的原型连接到了自己的原型对象。
所以至少在V8的实现中Function是所有原型的顶点,除了null和undefined。
+ 柯里化
>又称部分求值,先接受一些参数,但并不立刻求值,二是继续返回另外一个函数,并将参数在闭包中保存。等到真正求值时,在一次性求值。
```javascript
var currying = function(fn){
var args = []
return function(){
if(arguments.length === 0){
return fn.call(this, args)
}else{
[].push.apply(args,arguments);
return arguments.callee;
}
}
};
var cost = (function(){
var money = 0;
return function() {
for(var i = 0; i < arguments.length; i++){
money += arguments[i];
}
return money
}
})();
var cost = currying(cost);
cost(100);
cost(200);
cost(300);
cost() //600
```
+ 单例模式
```javascript
var single = function(fn) {
var once;
return function() {
return once || (once = fn.apply(this,arguments))
}
}
```