当onload事件触发时,页面上全部的DOM,样式表,脚本,图片,flash都已经加载完成了。javascript
当DOMContentLoaded事件触发时,仅当DOM加载完成,不包括样式表,图片,flashcss
域名/端口/协议不一样会产生跨域,解决方案有:html
经过jsonp跨域前端
CORS跨域资源共享,即引入一些自定义的HTTP Header来完成客户端与服务端的通讯vue
Access-Control-Allow-Credentials: true
var xhr = new XMLHttpRequest();
xhr.w
ithCredentials = true;
复制代码
非简单通讯,如PUT或DELETEjava
正式通讯以前,先发送options预请求,必须字段Access-Control-Request-Method/Access-Control-Request-Headersreact
document.domain + iframe跨域(限主域相同,子域不一样的跨域应用场景)webpack
json和CORS的比较es6
apply call这两个方法是函数的非继承方法,用途都是设置函数体内this对象的值web
//apply接收两个参数,第一个是运行函数的做用域,通俗的说就是将这个参数做为this指向的值.第二个参数是数组做为执行函数的参数
function sum(num1,num2){
return num1+num2;
}
function callSum(num1,num2){
return sum.apply(this,arguments);
}
alert(callSum(10,10)); //20
//call接收的第一个参数也是运行函数的做用域,后面的参数也是传递给执行函数的参数,与apply不一样的是,后面的参数并不是数组,而是逐个列举出来的
function sum(sum1,sum2){
return sum1+sum2;
}
function callSum(num1,num2){
return sum.call(this,num1,num2);
}
alert(callSum(10,10)); //20
复制代码
// 父类
function Animal(name) {
this.name = name;
this.sheep = function () {
console.log(this.name + "正在睡觉")
}
}
//子类
function Dog(name) {
Animal.apply(this, arguments);
this.name = name;
}
Dog.prototype = new Animal();
Dog.constructor.prototype = Dog;
var dog = new Dog("dashazi");
console.log(dog.name);
console.log(dog.sheep());
复制代码
class Animal{
constructor(name){
this.name=name;
}
say(sound){
console.log(this.name+"在说"+sound)
}
}
class Dog extends Animal{
constructor(name){
super(name);
this.name=name;
}
}
var dog=new Dog("dashazi");
dog.say("汪汪");
console.log(dog.name);
复制代码
//实现两个变量值的交换
let a=1;
let b=2;
[a,b]=[b,a];
// 输出a 为2,b为1
复制代码
相似数组,可是成员值都是惟一的,值不可重复
使用反引号``,${varible}
var promise = new Promise((resolve, reject) => {
if (操做成功) {
resolve(value)
} else {
reject(error)
}
})
promise.then(function (value) {
// success
}, function (value) {
// fail
})
复制代码
const promise = new Promise((resolve, reject) => {
console.log(1)
resolve()
console.log(2)
})
promise.then(() => {
console.log(3)
})
console.log(4)
//1 2 4 3
//Promise 构造函数是同步执行的,promise.then 中的函数是异步执行的。
const promise = new Promise((resolve, reject) => {
resolve('success1')
reject('error')
resolve('success2')
})
promise
.then((res) => {
console.log('then: ', res)
})
.catch((err) => {
console.log('catch: ', err)
})
//then,success1
//由于构造函数中的 resolve 或 reject 只有第一次执行有效,屡次调用没有任何做用,呼应代码二结论:promise 状态一旦改变则不能再变
const promise = new Promise((resolve, reject) => {
setTimeout(() => {
console.log('once')
resolve('success')
}, 1000)
})
const start = Date.now()
promise.then((res) => {
console.log(res, Date.now() - start)
})
promise.then((res) => {
console.log(res, Date.now() - start)
})
// once
// success 1000
// success 1000
//由于promise 的 .then 或者 .catch 能够被调用屡次,但这里 Promise 构造函数只执行一次。或者说 promise 内部状态一经改变,而且有了一个值,那么后续每次调用 .then 或者 .catch 都会直接拿到该值
复制代码
key 在其同级元素中具备惟一性,根据key值来判断该元素是建立仍是移动,从而减小没必要要的元素从新渲染
将传入的参数对象与组件当前的状态合并,而后触发调和过程(Reconciliation),调和根据新的状态构建 React 元素树而且着手从新渲染整个 UI 界面,据新树和旧树的差别对界面进行最小化重渲染,保证了按需跟新还不是所有从新加载
虚拟dom至关于在dom和js之间加了一个缓存,dom diff算法避免了没有必要的dom操做。
用javascript对象结构表示dom树的结构,而后用这个树构建一个真正的 DOM 树,当变动时候从新构造一个对象树,新树和旧树做比较
访问dom元素,给元素添加ref属性
像input,textarea,select这些组件的输入和value由state来追踪
子类必须在 constructor 中调用 super(),递 props 给 super() ,子类才能经过this.props调用
creat-react-app
复制代码
解决了组件间状态共享的问题,action ,store,reducer
建立虚拟dom,当状态改变时,根据diff算法来虚拟dom的改变,以后根据调和来更改dom
bundle是由webpack打包出来的文件,chunk是指webpack在进行模块的依赖分析的时候,代码分割出来的代码块。module是开发中的单个模块。
大致相同,但小程序直接this.data的属性是不能够同步到视图的,必须调用this.setData()方法!