20211021

1痰洒、js里的事件循環(huán)機制(event loop)
答:js事件循環(huán)中有異步隊列有兩種:宏任務(wù)隊列(macro)和微任務(wù)隊列(micro)
常見的宏任務(wù)比如:setTimeout科雳、setInterval、 setImmediate东且、script(整體代碼)、 I/O 操作、UI 渲染等昧绣。
常見的微任務(wù)比如:process。nextTick捶闸、Pormise夜畴、MutationObserver 等。
eventLoop循環(huán)過程:
1删壮、初始狀態(tài):微任務(wù)隊列只有一個script腳本贪绘;(整體代碼為宏任務(wù))
2、【宏任務(wù)階段】執(zhí)行script代碼央碟,創(chuàng)建宏任務(wù)到宏任務(wù)調(diào)用棧中税灌,創(chuàng)建的微任務(wù)到微任務(wù)調(diào)用棧中。
3、【微任務(wù)階段】執(zhí)行微任務(wù)菱涤,調(diào)出當(dāng)前微任務(wù)中的所有微任務(wù)苞也,一次性執(zhí)行,其中如果有宏任務(wù)推到宏任務(wù)棧中粘秆。
4如迟、【宏任務(wù)階段】執(zhí)行宏任務(wù),調(diào)用當(dāng)前宏任務(wù)棧中的第一個宏任務(wù)攻走,其中有創(chuàng)見的微任務(wù)推到微任務(wù)棧中殷勘。
5、如果代碼沒結(jié)束陋气,循環(huán)執(zhí)行3劳吠、4步驟。
總結(jié):1巩趁、宏任務(wù)和微任務(wù)是交替進(jìn)行的
2痒玩、每個宏任務(wù)只執(zhí)行棧中的第一個任務(wù),執(zhí)行完就執(zhí)行微任務(wù)议慰。微任務(wù)執(zhí)行棧中所有的微任務(wù)蠢古。

console.log('sync');
 
setTimeout(function () {
   console.log('setTimeout')
}, 0);
 
var promise = new Promise(function (resolve, reject) {
   console.log('promise');
   setTimeout(function() {
      promise.then(function(){
        console.log('promise-setTimeout-then')    
      })
      console.log('promise-setTimeout')
   }, 0);
   resolve();
});
 
promise.then(function() {
    setTimeout(function() { 
            promise.then(function(){
                console.log('then-setTimeout-then')    
            })
            console.log('then-setTimeout')
    }, 0);
    console.log('then');
    promise.then(function(){
        console.log('then-than')    
    })
})
////宏任務(wù)階段
sync  
promise
//微任務(wù)階段
then
then - than
//宏任務(wù)階段
setTimeout
//微任務(wù)階段(沒有任務(wù),沒有輸出)
//宏任務(wù)階段
promise - setTimeout
//微任務(wù)階段
promise - setTimeout - then
//宏任務(wù)階段
then - setTimeout
//微任務(wù)階段
then-setTimeout-then

如果不清楚請?zhí)D(zhuǎn)鏈接:https://blog.csdn.net/webjhh/article/details/116759051
2别凹、This指向怎么去改變
答:call草讶、apply、bind三個為改變this指向的方法炉菲。
共同點:第一個參數(shù)都為改變this的指針堕战。若第一參數(shù)為null/undefined,this默認(rèn)指向window
區(qū)別:call(無數(shù)個參數(shù))參數(shù)是一個一個傳遞拍霜。第一個參數(shù):改變this指向嘱丢;第二個參數(shù):實參;使用之后會自動執(zhí)行該函數(shù)

function fn(a,b,c){
        console.log(this,a+b+c); // this指向window
    }
    fn();
    fn.call(document,1,2,3);//call改變之后this指向document  
    //輸出 #document 6   1,2,3是實參 結(jié)果相加為6

apply(兩個參數(shù))是把所有參數(shù)組成一個數(shù)組傳遞祠饺。第一個參數(shù):改變this指向越驻;第二個參數(shù):數(shù)組(里面為實參);使用時候會自動執(zhí)行函數(shù)

function fn(a,b,c){
        console.log(this,a+b+c); 
    }
    fn();
    fn.apply(document,[1,2,3]); 

bind(無數(shù)個參數(shù))道偷,第一個參數(shù):改變this指向缀旁;第二個參數(shù)之后:實參;返回值為一個新的函數(shù)

function fn(a,b,c){
    console.log(this,a+b+c); //window
}
let ff = fn.bind('小明',1,2,3); //手動調(diào)用一下

使用的時候需要手動調(diào)用下返回 的新函數(shù)(不會自動執(zhí)行)
3勺鸦、箭頭函數(shù)和function的區(qū)別
答:1并巍、箭頭函數(shù)語法比普通函數(shù)簡潔
2、箭頭函數(shù)沒有自己的this换途,它里面的this屬于函數(shù)的上下文中的this
對箭頭函數(shù)的了解:
語法比較簡單
沒有this指向arguments/window 如果有就是來自父級作用域懊渡。
4嘶窄、一個array去改變數(shù)組里的某一項,視圖里會發(fā)生變化嗎距贷?
答:直接改變數(shù)組是不能改變視圖的,修改array的length也無法觸發(fā)視圖更新吻谋。
觸發(fā)視圖更新的方法有如下幾種:
1忠蝗、Vue.set,可以設(shè)置對象或數(shù)組的值漓拾,通過key或數(shù)組索引阁最,可以觸發(fā)視圖更新

// 數(shù)組修改
Vue.set(array, indexOfItem, newValue)
this.array.$set(indexOfItem, newValue)
// 對象修改
Vue.set(obj, keyOfItem, newValue)
this.obj.$set(keyOfItem, newValue)

2、Vue.delete骇两,刪除對象或數(shù)組中元素速种,通過key或數(shù)組索引,可以觸發(fā)視圖更新

// 數(shù)組修改
Vue.delete(array, indexOfItem)
this.array.$delete(indexOfItem)
// 對象修改
Vue.delete(obj, keyOfItem)
this.obj.$delete(keyOfItem)

3低千、數(shù)組對象直接修改屬性配阵,可以觸發(fā)視圖更新

this.array[0].show = true;
this.array.forEach(function(item){
   item.show = true;
});

4、splice方法修改數(shù)組示血,可以觸發(fā)視圖更新

this.array.splice(indexOfItem, 1, newElement)

5棋傍、數(shù)組賦值為新數(shù)組,可以觸發(fā)視圖更新

this.array = this.array.filter(...)
this.array = this.array.concat(...)

6难审、用Object.assign或lodash.assign可以為對象添加響應(yīng)式屬性瘫拣,可以觸發(fā)視圖更新

//Object.assign的單層的覆蓋前面的屬性,不會遞歸的合并屬性
this.obj = Object.assign({},this.obj,{a:1, b:2})

//assign與Object.assign一樣
this.obj = _.assign({},this.obj,{a:1, b:2})

//merge會遞歸的合并屬性
this.obj = _.merge({},this.obj,{a:1, b:2})

7告喊、Vue提供了如下的數(shù)組的變異方法麸拄,可以觸發(fā)視圖更新

push()
pop()
shift()
unshift()
splice()  
sort()
reverse()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市黔姜,隨后出現(xiàn)的幾起案子拢切,更是在濱河造成了極大的恐慌,老刑警劉巖地淀,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件失球,死亡現(xiàn)場離奇詭異,居然都是意外死亡帮毁,警方通過查閱死者的電腦和手機实苞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來烈疚,“玉大人黔牵,你說我怎么就攤上這事∫危” “怎么了猾浦?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵陆错,是天一觀的道長。 經(jīng)常有香客問我金赦,道長音瓷,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任夹抗,我火速辦了婚禮绳慎,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘漠烧。我一直安慰自己杏愤,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布已脓。 她就那樣靜靜地躺著珊楼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪度液。 梳的紋絲不亂的頭發(fā)上厕宗,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機與錄音恨诱,去河邊找鬼媳瞪。 笑死,一個胖子當(dāng)著我的面吹牛照宝,可吹牛的內(nèi)容都是我干的蛇受。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼厕鹃,長吁一口氣:“原來是場噩夢啊……” “哼兢仰!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起剂碴,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤把将,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后忆矛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體察蹲,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年催训,在試婚紗的時候發(fā)現(xiàn)自己被綠了洽议。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡漫拭,死狀恐怖亚兄,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情采驻,我是刑警寧澤审胚,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布匈勋,位于F島的核電站,受9級特大地震影響膳叨,放射性物質(zhì)發(fā)生泄漏洽洁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一菲嘴、第九天 我趴在偏房一處隱蔽的房頂上張望诡挂。 院中可真熱鬧,春花似錦临谱、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至苟穆,卻和暖如春抄课,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背雳旅。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工跟磨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人攒盈。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓抵拘,卻偏偏與公主長得像,于是被迫代替她去往敵國和親型豁。 傳聞我的和親對象是個殘疾皇子僵蛛,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 前言 針對面試的 JavaScript 知識點整理 1.介紹一下js的數(shù)據(jù)類型有哪些,值是如何存儲的 JavaSc...
    Moon_f3e1閱讀 231評論 0 0
  • 面試官:說說 JavaScript 中的基本類型有哪些迎变?以及各個數(shù)據(jù)類型是如何存儲的充尉? JavaScript 的數(shù)...
    Java柱柱閱讀 393評論 0 1
  • 1.數(shù)據(jù)類型 1.1概念篇 7種原始數(shù)據(jù)類型 引用類型 null是對象嗎?為什么衣形? 結(jié)論: null不是對象 解釋...
    859z閱讀 376評論 0 0
  • 1. 閉包 閉包是指有權(quán)訪問另一個函數(shù)作用域中變量的函數(shù)驼侠,創(chuàng)建閉包的最常見的方式就是在函數(shù)內(nèi)創(chuàng)建函數(shù),通過函數(shù)訪問...
    抽瘋的稻草繩閱讀 1,361評論 0 26
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,103評論 1 32