事件委託
//事件委託
window.onload = function(){
var oUl = document.getElementById("ul1");
oUl.onclick = function(ev){
var ev = ev || window.event;
var target = ev.target || ev.srcElement;
if(target.nodeName.toLowerCase() == 'li'){
alert(123);
alert(target.innerHTML);
}
}
}
ES6 Promise 和 Async/await的使用
//Promise
// 1請求
function getData1 () {
return new Promise(function (resolve, reject) {
setTimeout(() => {
console.log('1執行了')
resolve('請求到模擬數據1111拉')
}, 2000)
})
}
// 2請求
function getData2 (params) {
return new Promise(function (resolve, reject) {
setTimeout(() => {
console.log('2執行了')
resolve('請求到模擬數據22222拉!params:' + params)
}, 1500)
})
}
function promiseDemo () {
getData1()
.then(res => {
return getData2(res)
})
.then(res => {
console.log(res)
})
}
promiseDemo()
// 1執行了
// 2執行了
// 請求到模擬數據22222拉!params:請求到模擬數據1111拉 用時 3500 ms
//async+await
async function asyncDemo () {
const r1 = await getData1()
const r2 = await getData2(r1)
console.log(r2)
}
// 1執行了
// 2執行了
// 請求到模擬數據22222拉!params:請求到模擬數據1111拉 用時 3500 ms
二叉樹
在計算機科學中,二叉樹(英語:Binary tree)是每個節點最多隻有兩個分支(不存在分支度大於2的節點)的樹結構。通常分支被稱作“左子樹”和“右子樹”。二叉樹的分支具有左右次序,不能顛倒。
上面是來自維基百科的解釋。而每一個節點的值總大於左子樹的值,而小於右子樹的值的二叉樹就叫排序二叉樹。比如:那麼該如何創建一棵排序二叉樹呢?
function Btree() {
// 節點對象
var Node = function(key) {
this.key = key;
this.right = null;
this.left = null;
};
// 初始化根節點
var root = null;
var insertnode = function(node, newnode) {
// 判斷插到左子樹中還是右子樹中
if(newnode.key < node.key) {
if(node.left === null) {
node.left = newnode;
} else {
insertnode(node.left, newnode);
}
} else {
if(node.right === null) {
node.right = newnode;
} else {
insertnode(node.right, newnode);
}
}
};
this.insert = function(key) {
var newNode = new Node(key);
// 判斷插入的是否是根節點
if(root === null) {
root = newNode;
} else {
insertnode(root, newNode);
}
};
}我們可以看到插入到二叉樹的過程就是排序的過程,又如何把其輸(遍歷)出來呢。遍歷可分爲:
前序遍歷
中序遍歷
後序遍歷我們先看中序遍歷是如何實現的,只需要在Btree中加入以下兩個方法
var zhongxu = function(node, callback) {
if(node !== null) {
zhongxu(node.left, callback);
callback(node.key);
zhongxu(node.right, callback);
}
};
this.zhongxubianli = function(callback) {
zhongxu(root, callback);
}而前序後序與中序的差別不過在於callback方法的先後,即
前序就是先輸出值再依次遍歷左右子樹
中序就是先遍歷左子樹再輸出值然後再遍歷右子樹
後序就是先遍歷左右子樹再輸出值
// 前序遍歷
var qianxu = function(node, callback) {
if(node !== null) {
callback(node.key);
zhongxu(node.left, callback);
zhongxu(node.right, callback);
}
};// 後序遍歷
var houxu = function(node, callback) {
if(node !== null) {
zhongxu(node.left, callback);
zhongxu(node.right, callback);
callback(node.key);
}
};測試
var nodes = [8,2,4,5,7,13,11,9,14];
var btree = new Btree();
nodes.forEach(function(key) {
btree.insert(key);
})
var callback = function(key) {
console.log(key);
};
btree.zhongxubianli(callback);結果就是:
以上就是js的排序二叉樹實現過程。
Charles抓包工具的使用
- 第一步:創建測試文件。
- 第二步:創建數據文件,用測試文件發起請求測試數據。
- 第三步:配置Charles,Proxy->Proxy Setting->HTTP Proxy->Port (配置端口號任意,不要於本機其他端口衝突)
- 第四部:配置手機代理
- 第五部:手機和電腦鏈接同一個wifi,在統一網段下,啓動xampp服務器,手機通過ip訪問測試文件,請求的數據就會被抓包工具charles拿到。