TCP 和UDP的区别
TCP协议和UDP协议特性区别总结:
1. TCP协议在传送数据段的时候要给段标号;UDP协议不
2. TCP协议可靠;UDP协议不可靠
3. TCP协议是面向连接;UDP协议采用无连接
4. TCP协议负载较高,采用虚电路;UDP采用无连接
5. TCP协议的发送方要确认接收方是否收到数据段(3次握手协议)
6. TCP协议采用窗口技术和流控制
TCP三次握手携带的数据包
syn
syn+ack
ack
const 声明一个只读的常量。一旦声明,常量的值就不能改变(如果声明是一个对象,那么不能改变的是对象的引用地址)
cookie localStorage跨域问题
cookie 可以跨域
localStorage不能跨域但是,可以借助
postMessage
和iframe
来实现跨域的数据读取
事件冒泡
http://caibaojian.com/javascript-stoppropagation-preventdefault.html
js的继承,优缺点
一 原型继承
let Super = functioin(name = 'eric') { this.name = name; this.getName = function() { return this.name; } } let Sub = function(sex = 'male') { this.sex = sex; } Sub.prototype = new Super('eric'); //通过改变原型对象实现继承 Sub.prototype.constructor = Sub // 保持构造函数和原型对象的完整性 let sub1 = new Sub('male') sub2 = new Sub('female'); console.log(sub1.getName()); // eric console.log(sub1.hasOwnProperty('name')) // false 说明是继承而来的属性 console.log(sub1.getName === sub2.getName) // true,复用了方法
优点:父类的方法(getName)得到了复用。
缺点:同理父类的属性(name)也是复用,即子类实例没有自己的属性。
二 构造函数实现继承
let Super = function(name = 'eric') { this.name = name; this.getName = function() { return this.name; } } let Sub = function(name, sex) { Super.call(this, name); this.sex = sex; } let sub1 = new Sub('eric', 'male'); let sub2 = new Sub('ada', 'female'); console.log(sub1.name) // 'eric' console.log(sub1.hasOwnProperty('name')) // true 说明不是继承而来,是自己的属性 console.log(sub1.getName === sub2.getName) // false 方法没有得到复用
优点:子类的每个实例都有自己的属性(name),不会相互影响。
缺点:但是继承父类方法的时候就不需要这种特性,没有实现父类方法的复用。
三 组合式继承
let Super = function(name = 'eric') { this.name = name; } Super.prototype = { constructor: Super, getName() { return this.name; } } let Sub = function(sex) { Super.call(this, 'eric'); //继承父类属性 this.sex = sex; } Sub.prototype = new Super('eric'); //继承父类方法 Sub.prototype.constructor = Sub; let sub1 = new Sub('male'), sub2 = new Sub('female'); console.log(sub1.name); // 'eric' console.log(sub1.hasOwnP