當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()方法!