1兔跌,js中this指向的理解
在js面向?qū)ο缶幊汤镂覀儽苊獠涣耸褂胻his,所以理解this指向?qū)τ谠诿嫦驅(qū)ο缶幊? 中是很有必要的
判斷當(dāng)前this指向的步驟纸颜,
1商玫,函數(shù)是否是new中調(diào)用永脓,如果是泥技,則this綁定在新創(chuàng)建的這個對象上
2神妹,是否使用了call颓哮,bind,appliy鸵荠,如果是的話則this綁定在傳入的那個函數(shù)當(dāng)中
3冕茅,是否是在某個上下文對象中調(diào)用(隱式調(diào)用),如果是則this綁定是那個上下文對象,如aa.bb()姨伤,bb函數(shù)中的this綁定的就是aa
4哨坪,如果是箭頭函數(shù),則this繼承的是外層代碼塊中的this
5, 以上都不是的話乍楚,則在嚴(yán)格模式下当编,this就是undifined,非嚴(yán)格模式下徒溪,this是window忿偷。
6,如果bind,call,appliy傳入的參數(shù)是null或者undifined的話臊泌,那么this的指向就跟5是一樣的
推薦文章:https://juejin.im/post/5c96d0c751882511c832ff7b
call鲤桥、bind、apply的相同點與不同點
相同點:
1渠概,都是用來改變函數(shù)this指向的
2茶凳,第一個參數(shù)都是用來指定this指向的上下文、
3播揪,都可以利用后續(xù)參數(shù)傳參
不同點:
1贮喧,bind的調(diào)用不可以直接調(diào)用必須,bind方法返回的仍然是一個函數(shù)剪芍,因此后面還需要()來進行調(diào)用才可以塞淹,call跟apply都可以直接調(diào)用
bind 是返回對應(yīng)函數(shù),便于稍后調(diào)用罪裹;apply 饱普、call 則是立即調(diào)用
2,call的傳參方式是一個一個的傳状共,列如x.call(this,a1,a2)
3, apply的傳參方式是數(shù)組套耕,例如x.apply(this,[a1,a2]);
4, bind的傳參方式是x.bind(this,a1,a2)()還可以是x.bind(this)(a1,a2);
推薦文章:https://segmentfault.com/a/1190000016705780
https://juejin.im/post/5a9640335188257a7924d5ef
虛擬DOM與diff算法
虛擬DOM:
Diff算法:
推薦文章:http://www.reibang.com/p/616999666920
https://juejin.im/entry/5aedcfa351882506a36c664c
Async/await 和 Promise 區(qū)別
相同點:兩者都是用來處理異步函數(shù)問題
區(qū)別:
1,Async/await是在建立在promises上的峡继,async函數(shù)對 Generator 函數(shù)的改進
2冯袍,Async/await比promises語法上更加簡潔,看起來像是同步代碼碾牌,
Promise的用法:
function timeout(ms) {
return new Promise((resolve, reject) => {
setTimeout(resolve, ms, 'done');
});
}
timeout(100).then((value) => {//then方法是可以接受resolved狀態(tài)和rejected狀態(tài)兩個參數(shù)的
console.log(value);
}).catch(err=>{ //接受錯誤信息的參數(shù)
console.log(err)
});
Promise實例生成以后康愤,可以用then方法分別指定resolved狀態(tài)和rejected狀態(tài)的回調(diào)函數(shù)。
Promise.all() 方法用于將多個 Promise 實例舶吗,包裝成一個新的
如:const p = Promise.all([p1, p2, p3]);征冷,p的狀態(tài)只有當(dāng)p1,p2,p3都成功p的狀態(tài)才為成功,否則為失敗
Promise.race() 方法跟Promise.all() 是相反的誓琼,
如:const p = Promise.race([p1, p2, p3]);p的狀態(tài)只要當(dāng)p1,p2,p3有一個成功p的狀態(tài)就為成功
Async/await的用法:
const makeRequest = async() => {
console.log(await getJSON)
return "done"
}
makeRequest()
await一定得是在async函數(shù)里使用才能有效检激,Async其實就是Generator的語法糖肴捉,async函數(shù)自帶執(zhí)行器
推薦文章:http://es6.ruanyifeng.com/#docs/async
https://segmentfault.com/a/1190000013612116
垃圾回收機制
https://juejin.im/post/5b684f30f265da0f9f4e87cf
https://www.cnblogs.com/hustskyking/archive/2013/04/27/garbage-collection.html
瀏覽器事件循環(huán)機制
https://juejin.im/post/5afbc62151882542af04112d
上傳文件時斷點續(xù)傳怎么做
https://www.cnblogs.com/imwtr/p/5957391.html