前端高頻面試題(附答案)

說(shuō)一下HTTP 3.0

HTTP/3基于UDP協(xié)議實(shí)現(xiàn)了類似于TCP的多路復(fù)用數(shù)據(jù)流疾宏、傳輸可靠性等功能,這套功能被稱為QUIC協(xié)議。

  1. 流量控制、傳輸可靠性功能:QUIC在UDP的基礎(chǔ)上增加了一層來(lái)保證數(shù)據(jù)傳輸可靠性疲恢,它提供了數(shù)據(jù)包重傳、擁塞控制瓷胧、以及其他一些TCP中的特性显拳。

  2. 集成TLS加密功能:目前QUIC使用TLS1.3,減少了握手所花費(fèi)的RTT數(shù)搓萧。

  3. 多路復(fù)用:同一物理連接上可以有多個(gè)獨(dú)立的邏輯數(shù)據(jù)流萎攒,實(shí)現(xiàn)了數(shù)據(jù)流的單獨(dú)傳輸遇八,解決了TCP的隊(duì)頭阻塞問(wèn)題。

  4. 快速握手:由于基于UDP耍休,可以實(shí)現(xiàn)使用0 ~ 1個(gè)RTT來(lái)建立連接。

箭頭函數(shù)與普通函數(shù)的區(qū)別

(1)箭頭函數(shù)比普通函數(shù)更加簡(jiǎn)潔

  • 如果沒(méi)有參數(shù)货矮,就直接寫一個(gè)空括號(hào)即可
  • 如果只有一個(gè)參數(shù)羊精,可以省去參數(shù)的括號(hào)
  • 如果有多個(gè)參數(shù),用逗號(hào)分割
  • 如果函數(shù)體的返回值只有一句囚玫,可以省略大括號(hào)
  • 如果函數(shù)體不需要返回值喧锦,且只有一句話,可以給這個(gè)語(yǔ)句前面加一個(gè)void關(guān)鍵字抓督。最常見(jiàn)的就是調(diào)用一個(gè)函數(shù):
let fn = () => void doesNotReturn();
復(fù)制代碼

(2)箭頭函數(shù)沒(méi)有自己的this

箭頭函數(shù)不會(huì)創(chuàng)建自己的this燃少, 所以它沒(méi)有自己的this,它只會(huì)在自己作用域的上一層繼承this铃在。所以箭頭函數(shù)中this的指向在它在定義時(shí)已經(jīng)確定了阵具,之后不會(huì)改變。

(3)箭頭函數(shù)繼承來(lái)的this指向永遠(yuǎn)不會(huì)改變

var id = 'GLOBAL';
var obj = {
  id: 'OBJ',
  a: function(){
    console.log(this.id);
  },
  b: () => {
    console.log(this.id);
  }
};
obj.a();    // 'OBJ'
obj.b();    // 'GLOBAL'
new obj.a()  // undefined
new obj.b()  // Uncaught TypeError: obj.b is not a constructor
復(fù)制代碼

對(duì)象obj的方法b是使用箭頭函數(shù)定義的定铜,這個(gè)函數(shù)中的this就永遠(yuǎn)指向它定義時(shí)所處的全局執(zhí)行環(huán)境中的this阳液,即便這個(gè)函數(shù)是作為對(duì)象obj的方法調(diào)用,this依舊指向Window對(duì)象揣炕。需要注意帘皿,定義對(duì)象的大括號(hào){}是無(wú)法形成一個(gè)單獨(dú)的執(zhí)行環(huán)境的,它依舊是處于全局執(zhí)行環(huán)境中畸陡。

(4)call()鹰溜、apply()、bind()等方法不能改變箭頭函數(shù)中this的指向

var id = 'Global';
let fun1 = () => {
    console.log(this.id)
};
fun1();                     // 'Global'
fun1.call({id: 'Obj'});     // 'Global'
fun1.apply({id: 'Obj'});    // 'Global'
fun1.bind({id: 'Obj'})();   // 'Global'
復(fù)制代碼

(5)箭頭函數(shù)不能作為構(gòu)造函數(shù)使用

構(gòu)造函數(shù)在new的步驟在上面已經(jīng)說(shuō)過(guò)了丁恭,實(shí)際上第二步就是將函數(shù)中的this指向該對(duì)象曹动。 但是由于箭頭函數(shù)時(shí)沒(méi)有自己的this的,且this指向外層的執(zhí)行環(huán)境涩惑,且不能改變指向仁期,所以不能當(dāng)做構(gòu)造函數(shù)使用。

(6)箭頭函數(shù)沒(méi)有自己的arguments

箭頭函數(shù)沒(méi)有自己的arguments對(duì)象竭恬。在箭頭函數(shù)中訪問(wèn)arguments實(shí)際上獲得的是它外層函數(shù)的arguments值跛蛋。

(7)箭頭函數(shù)沒(méi)有prototype

(8)箭頭函數(shù)不能用作Generator函數(shù),不能使用yeild關(guān)鍵字

Loader和Plugin 有什么區(qū)別

Loader:直譯為"加載器"痊硕。Webpack將一切文件視為模塊赊级,但是webpack原生是只能解析js文件,如果想將其他文件也打包的話岔绸,就會(huì)用到loader理逊。 所以Loader的作用是讓webpack擁有了加載和解析非JavaScript文件的能力橡伞。 Plugin:直譯為"插件"。Plugin可以擴(kuò)展webpack的功能晋被,讓webpack具有更多的靈活性兑徘。 在 Webpack 運(yùn)行的生命周期中會(huì)廣播出許多事件,Plugin 可以監(jiān)聽(tīng)這些事件羡洛,在合適的時(shí)機(jī)通過(guò) Webpack 提供的 API 改變輸出結(jié)果挂脑。

setTimeout、Promise欲侮、Async/Await 的區(qū)別

(1)setTimeout

console.log('script start')    //1. 打印 script start
setTimeout(function(){
    console.log('settimeout')    // 4. 打印 settimeout
})    // 2. 調(diào)用 setTimeout 函數(shù)崭闲,并定義其完成后執(zhí)行的回調(diào)函數(shù)
console.log('script end')    //3. 打印 script start
// 輸出順序:script start->script end->settimeout
復(fù)制代碼

(2)Promise

Promise本身是同步的立即執(zhí)行函數(shù), 當(dāng)在executor中執(zhí)行resolve或者reject的時(shí)候, 此時(shí)是異步操作威蕉, 會(huì)先執(zhí)行then/catch等刁俭,當(dāng)主棧完成后,才會(huì)去調(diào)用resolve/reject中存放的方法執(zhí)行韧涨,打印p的時(shí)候牍戚,是打印的返回結(jié)果,一個(gè)Promise實(shí)例氓奈。

console.log('script start')
let promise1 = new Promise(function (resolve) {
    console.log('promise1')
    resolve()
    console.log('promise1 end')
}).then(function () {
    console.log('promise2')
})
setTimeout(function(){
    console.log('settimeout')
})
console.log('script end')
// 輸出順序: script start->promise1->promise1 end->script end->promise2->settimeout
復(fù)制代碼

當(dāng)JS主線程執(zhí)行到Promise對(duì)象時(shí):

  • promise1.then() 的回調(diào)就是一個(gè) task
  • promise1 是 resolved或rejected: 那這個(gè) task 就會(huì)放入當(dāng)前事件循環(huán)回合的 microtask queue
  • promise1 是 pending: 這個(gè) task 就會(huì)放入 事件循環(huán)的未來(lái)的某個(gè)(可能下一個(gè))回合的 microtask queue 中
  • setTimeout 的回調(diào)也是個(gè) task 翘魄,它會(huì)被放入 macrotask queue 即使是 0ms 的情況

(3)async/await

async function async1(){
   console.log('async1 start');
    await async2();
    console.log('async1 end')
}
async function async2(){
    console.log('async2')
}
console.log('script start');
async1();
console.log('script end')
// 輸出順序:script start->async1 start->async2->script end->async1 end
復(fù)制代碼

async 函數(shù)返回一個(gè) Promise 對(duì)象,當(dāng)函數(shù)執(zhí)行的時(shí)候舀奶,一旦遇到 await 就會(huì)先返回暑竟,等到觸發(fā)的異步操作完成,再執(zhí)行函數(shù)體內(nèi)后面的語(yǔ)句育勺〉纾可以理解為,是讓出了線程涧至,跳出了 async 函數(shù)體腹躁。

例如:

async function func1() {
    return 1
}
console.log(func1())
復(fù)制代碼

[圖片上傳失敗...(image-a8a221-1661775315811)] func1的運(yùn)行結(jié)果其實(shí)就是一個(gè)Promise對(duì)象。因此也可以使用then來(lái)處理后續(xù)邏輯南蓬。

func1().then(res => {
    console.log(res);  // 30
})
復(fù)制代碼

await的含義為等待纺非,也就是 async 函數(shù)需要等待await后的函數(shù)執(zhí)行完成并且有了返回結(jié)果(Promise對(duì)象)之后,才能繼續(xù)執(zhí)行下面的代碼赘方。await通過(guò)返回一個(gè)Promise對(duì)象來(lái)實(shí)現(xiàn)同步的效果烧颖。

瀏覽器是如何對(duì) HTML5 的離線儲(chǔ)存資源進(jìn)行管理和加載?

  • 在線的情況下窄陡,瀏覽器發(fā)現(xiàn) html 頭部有 manifest 屬性炕淮,它會(huì)請(qǐng)求 manifest 文件,如果是第一次訪問(wèn)頁(yè)面 跳夭,那么瀏覽器就會(huì)根據(jù) manifest 文件的內(nèi)容下載相應(yīng)的資源并且進(jìn)行離線存儲(chǔ)涂圆。如果已經(jīng)訪問(wèn)過(guò)頁(yè)面并且資源已經(jīng)進(jìn)行離線存儲(chǔ)了们镜,那么瀏覽器就會(huì)使用離線的資源加載頁(yè)面,然后瀏覽器會(huì)對(duì)比新的 manifest 文件與舊的 manifest 文件润歉,如果文件沒(méi)有發(fā)生改變模狭,就不做任何操作,如果文件改變了踩衩,就會(huì)重新下載文件中的資源并進(jìn)行離線存儲(chǔ)胞皱。
  • 離線的情況下,瀏覽器會(huì)直接使用離線存儲(chǔ)的資源九妈。

vuex

vuex是一個(gè)專為vue.js應(yīng)用程序開(kāi)發(fā)的狀態(tài)管理器,它采用集中式存儲(chǔ)管理應(yīng)用的所有組件的狀態(tài)雾鬼,并且以相
應(yīng)的規(guī)則保證狀態(tài)以一種可以預(yù)測(cè)的方式發(fā)生變化萌朱。

state: vuex使用單一狀態(tài)樹(shù),用一個(gè)對(duì)象就包含來(lái)全部的應(yīng)用層級(jí)狀態(tài)

mutation: 更改vuex中state的狀態(tài)的唯一方法就是提交mutation

action: action提交的是mutation策菜,而不是直接變更狀態(tài)晶疼,action可以包含任意異步操作

getter: 相當(dāng)于vue中的computed計(jì)算屬性
復(fù)制代碼

代碼輸出結(jié)果

const first = () => (new Promise((resolve, reject) => {
    console.log(3);
    let p = new Promise((resolve, reject) => {
        console.log(7);
        setTimeout(() => {
            console.log(5);
            resolve(6);
            console.log(p)
        }, 0)
        resolve(1);
    });
    resolve(2);
    p.then((arg) => {
        console.log(arg);
    });
}));
first().then((arg) => {
    console.log(arg);
});
console.log(4);
復(fù)制代碼

輸出結(jié)果如下:

3
7
4
1
2
5
Promise{<resolved>: 1}
復(fù)制代碼

代碼的執(zhí)行過(guò)程如下:

  1. 首先會(huì)進(jìn)入Promise,打印出3又憨,之后進(jìn)入下面的Promise翠霍,打印出7;
  2. 遇到了定時(shí)器蠢莺,將其加入宏任務(wù)隊(duì)列寒匙;
  3. 執(zhí)行Promise p中的resolve,狀態(tài)變?yōu)閞esolved躏将,返回值為1锄弱;
  4. 執(zhí)行Promise first中的resolve,狀態(tài)變?yōu)閞esolved祸憋,返回值為2会宪;
  5. 遇到p.then,將其加入微任務(wù)隊(duì)列蚯窥,遇到first().then掸鹅,將其加入任務(wù)隊(duì)列;
  6. 執(zhí)行外面的代碼拦赠,打印出4巍沙;
  7. 這樣第一輪宏任務(wù)就執(zhí)行完了,開(kāi)始執(zhí)行微任務(wù)隊(duì)列中的任務(wù)矛紫,先后打印出1和2赎瞎;
  8. 這樣微任務(wù)就執(zhí)行完了,開(kāi)始執(zhí)行下一輪宏任務(wù)颊咬,宏任務(wù)隊(duì)列中有一個(gè)定時(shí)器务甥,執(zhí)行它牡辽,打印出5,由于執(zhí)行已經(jīng)變?yōu)閞esolved狀態(tài)敞临,所以resolve(6)不會(huì)再執(zhí)行态辛;
  9. 最后console.log(p)打印出Promise{<resolved>: 1}

setTimeout 模擬 setInterval

描述:使用setTimeout模擬實(shí)現(xiàn)setInterval的功能挺尿。

實(shí)現(xiàn)

const mySetInterval(fn, time) {
    let timer = null;
    const interval = () => {
        timer = setTimeout(() => {
            fn();  // time 時(shí)間之后會(huì)執(zhí)行真正的函數(shù)fn
            interval();  // 同時(shí)再次調(diào)用interval本身
        }, time)
    }
    interval();  // 開(kāi)始執(zhí)行
    // 返回用于關(guān)閉定時(shí)器的函數(shù)
    return () => clearTimeout(timer);
}

// 測(cè)試
const cancel = mySetInterval(() => console.log(1), 400);
setTimeout(() => {
    cancel();
}, 1000);  
// 打印兩次1
復(fù)制代碼

函數(shù)中的arguments是數(shù)組嗎奏黑?類數(shù)組轉(zhuǎn)數(shù)組的方法了解一下?

是類數(shù)組编矾,是屬于鴨子類型的范疇熟史,長(zhǎng)得像數(shù)組,

  • ... 運(yùn)算符
  • Array.from
  • Array.prototype.slice.apply(arguments)

實(shí)現(xiàn)一個(gè)扇形

用CSS實(shí)現(xiàn)扇形的思路和三角形基本一致窄俏,就是多了一個(gè)圓角的樣式蹂匹,實(shí)現(xiàn)一個(gè)90°的扇形:

div{
    border: 100px solid transparent;
    width: 0;
    heigt: 0;
    border-radius: 100px;
    border-top-color: red;
}
復(fù)制代碼

如果一個(gè)構(gòu)造函數(shù),bind了一個(gè)對(duì)象凹蜈,用這個(gè)構(gòu)造函數(shù)創(chuàng)建出的實(shí)例會(huì)繼承這個(gè)對(duì)象的屬性嗎限寞?為什么?

不會(huì)繼承仰坦,因?yàn)楦鶕?jù) this 綁定四大規(guī)則履植,new 綁定的優(yōu)先級(jí)高于 bind 顯示綁定,通過(guò) new 進(jìn)行構(gòu)造函數(shù)調(diào)用時(shí)悄晃,會(huì)創(chuàng)建一個(gè)新對(duì)象玫霎,這個(gè)新對(duì)象會(huì)代替 bind 的對(duì)象綁定,作為此函數(shù)的 this传泊,并且在此函數(shù)沒(méi)有返回對(duì)象的情況下鼠渺,返回這個(gè)新建的對(duì)象

什么是尾調(diào)用,使用尾調(diào)用有什么好處眷细?

尾調(diào)用指的是函數(shù)的最后一步調(diào)用另一個(gè)函數(shù)拦盹。代碼執(zhí)行是基于執(zhí)行棧的,所以當(dāng)在一個(gè)函數(shù)里調(diào)用另一個(gè)函數(shù)時(shí)溪椎,會(huì)保留當(dāng)前的執(zhí)行上下文普舆,然后再新建另外一個(gè)執(zhí)行上下文加入棧中。使用尾調(diào)用的話校读,因?yàn)橐呀?jīng)是函數(shù)的最后一步沼侣,所以這時(shí)可以不必再保留當(dāng)前的執(zhí)行上下文,從而節(jié)省了內(nèi)存歉秫,這就是尾調(diào)用優(yōu)化蛾洛。但是 ES6 的尾調(diào)用優(yōu)化只在嚴(yán)格模式下開(kāi)啟,正常模式是無(wú)效的。

CSS預(yù)處理器/后處理器是什么轧膘?為什么要使用它們钞螟?

預(yù)處理器, 如:less谎碍,sass鳞滨,stylus,用來(lái)預(yù)編譯sass或者less蟆淀,增加了css代碼的復(fù)用性拯啦。層級(jí),mixin熔任, 變量褒链,循環(huán), 函數(shù)等對(duì)編寫以及開(kāi)發(fā)UI組件都極為方便疑苔。

后處理器碱蒙, 如: postCss,通常是在完成的樣式表中根據(jù)css規(guī)范處理css夯巷,讓其更加有效。目前最常做的是給css屬性添加瀏覽器私有前綴哀墓,實(shí)現(xiàn)跨瀏覽器兼容性的問(wèn)題趁餐。

css預(yù)處理器為css增加一些編程特性,無(wú)需考慮瀏覽器的兼容問(wèn)題篮绰,可以在CSS中使用變量后雷,簡(jiǎn)單的邏輯程序,函數(shù)等在編程語(yǔ)言中的一些基本的性能吠各,可以讓css更加的簡(jiǎn)潔臀突,增加適應(yīng)性以及可讀性,可維護(hù)性等贾漏。

其它css預(yù)處理器語(yǔ)言:Sass(Scss), Less, Stylus, Turbine, Swithch css, CSS Cacheer, DT Css候学。

使用原因:

  • 結(jié)構(gòu)清晰, 便于擴(kuò)展
  • 可以很方便的屏蔽瀏覽器私有語(yǔ)法的差異
  • 可以輕松實(shí)現(xiàn)多重繼承
  • 完美的兼容了CSS代碼纵散,可以應(yīng)用到老項(xiàng)目中

new 一個(gè)構(gòu)造函數(shù)梳码,如果函數(shù)返回 return {}return null 伍掀, return 1 掰茶, return true 會(huì)發(fā)生什么情況?

如果函數(shù)返回一個(gè)對(duì)象蜜笤,那么new 這個(gè)函數(shù)調(diào)用返回這個(gè)函數(shù)的返回對(duì)象濒蒋,否則返回 new 創(chuàng)建的新對(duì)象

什么是margin重疊問(wèn)題?如何解決把兔?

問(wèn)題描述: 兩個(gè)塊級(jí)元素的上外邊距和下外邊距可能會(huì)合并(折疊)為一個(gè)外邊距沪伙,其大小會(huì)取其中外邊距值大的那個(gè)瓮顽,這種行為就是外邊距折疊。需要注意的是焰坪,浮動(dòng)的元素和絕對(duì)定位這種脫離文檔流的元素的外邊距不會(huì)折疊趣倾。重疊只會(huì)出現(xiàn)在垂直方向

計(jì)算原則: 折疊合并后外邊距的計(jì)算原則如下:

  • 如果兩者都是正數(shù)某饰,那么就去最大者
  • 如果是一正一負(fù)儒恋,就會(huì)正值減去負(fù)值的絕對(duì)值
  • 兩個(gè)都是負(fù)值時(shí),用0減去兩個(gè)中絕對(duì)值大的那個(gè)

解決辦法: 對(duì)于折疊的情況黔漂,主要有兩種:兄弟之間重疊父子之間重疊 (1)兄弟之間重疊

  • 底部元素變?yōu)樾袃?nèi)盒子:display: inline-block
  • 底部元素設(shè)置浮動(dòng):float
  • 底部元素的position的值為absolute/fixed

(2)父子之間重疊

  • 父元素加入:overflow: hidden
  • 父元素添加透明邊框:border:1px solid transparent
  • 子元素變?yōu)樾袃?nèi)盒子:display: inline-block
  • 子元素加入浮動(dòng)屬性或定位

CSS選擇器及其優(yōu)先級(jí)

選擇器 格式 優(yōu)先級(jí)權(quán)重
id選擇器 #id 100
類選擇器 #classname 10
屬性選擇器 a[ref=“eee”] 10
偽類選擇器 li:last-child 10
標(biāo)簽選擇器 div 1
偽元素選擇器 li:after 1
相鄰兄弟選擇器 h1+p 0
子選擇器 ul>li 0
后代選擇器 li a 0
通配符選擇器 * 0

對(duì)于選擇器的優(yōu)先級(jí)

  • 標(biāo)簽選擇器诫尽、偽元素選擇器:1
  • 類選擇器、偽類選擇器炬守、屬性選擇器:10
  • id 選擇器:100
  • 內(nèi)聯(lián)樣式:1000

注意事項(xiàng):

  • !important聲明的樣式的優(yōu)先級(jí)最高牧嫉;
  • 如果優(yōu)先級(jí)相同,則最后出現(xiàn)的樣式生效减途;
  • 繼承得到的樣式的優(yōu)先級(jí)最低酣藻;
  • 通用選擇器(*)、子選擇器(>)和相鄰?fù)x擇器(+)并不在這四個(gè)等級(jí)中鳍置,所以它們的權(quán)值都為 0 辽剧;
  • 樣式表的來(lái)源不同時(shí),優(yōu)先級(jí)順序?yàn)椋簝?nèi)聯(lián)樣式 > 內(nèi)部樣式 > 外部樣式 > 瀏覽器用戶自定義樣式 > 瀏覽器默認(rèn)樣式税产。

Proxy 可以實(shí)現(xiàn)什么功能怕轿?

在 Vue3.0 中通過(guò) Proxy 來(lái)替換原本的 Object.defineProperty 來(lái)實(shí)現(xiàn)數(shù)據(jù)響應(yīng)式。

Proxy 是 ES6 中新增的功能辟拷,它可以用來(lái)自定義對(duì)象中的操作撞羽。

let p = new Proxy(target, handler)
復(fù)制代碼

target 代表需要添加代理的對(duì)象,handler 用來(lái)自定義對(duì)象中的操作衫冻,比如可以用來(lái)自定義 set 或者 get 函數(shù)诀紊。

下面來(lái)通過(guò) Proxy 來(lái)實(shí)現(xiàn)一個(gè)數(shù)據(jù)響應(yīng)式:

let onWatch = (obj, setBind, getLogger) => {
  let handler = {
    get(target, property, receiver) {
      getLogger(target, property)
      return Reflect.get(target, property, receiver)
    },
    set(target, property, value, receiver) {
      setBind(value, property)
      return Reflect.set(target, property, value)
    }
  }
  return new Proxy(obj, handler)
}
let obj = { a: 1 }
let p = onWatch(
  obj,
  (v, property) => {
    console.log(`監(jiān)聽(tīng)到屬性${property}改變?yōu)?{v}`)
  },
  (target, property) => {
    console.log(`'${property}' = ${target[property]}`)
  }
)
p.a = 2 // 監(jiān)聽(tīng)到屬性a改變
p.a // 'a' = 2
復(fù)制代碼

在上述代碼中,通過(guò)自定義 setget 函數(shù)的方式隅俘,在原本的邏輯中插入了我們的函數(shù)邏輯渡紫,實(shí)現(xiàn)了在對(duì)對(duì)象任何屬性進(jìn)行讀寫時(shí)發(fā)出通知。

當(dāng)然這是簡(jiǎn)單版的響應(yīng)式實(shí)現(xiàn)考赛,如果需要實(shí)現(xiàn)一個(gè) Vue 中的響應(yīng)式惕澎,需要在 get 中收集依賴,在 set 派發(fā)更新颜骤,之所以 Vue3.0 要使用 Proxy 替換原本的 API 原因在于 Proxy 無(wú)需一層層遞歸為每個(gè)屬性添加代理唧喉,一次即可完成以上操作,性能上更好,并且原本的實(shí)現(xiàn)有一些數(shù)據(jù)更新不能監(jiān)聽(tīng)到八孝,但是 Proxy 可以完美監(jiān)聽(tīng)到任何方式的數(shù)據(jù)改變董朝,唯一缺陷就是瀏覽器的兼容性不好。

說(shuō)下對(duì) JS 的了解吧

是基于原型的動(dòng)態(tài)語(yǔ)言干跛,主要獨(dú)特特性有 this子姜、原型和原型鏈。

JS 嚴(yán)格意義上來(lái)說(shuō)分為:語(yǔ)言標(biāo)準(zhǔn)部分(ECMAScript)+ 宿主環(huán)境部分

語(yǔ)言標(biāo)準(zhǔn)部分

2015 年發(fā)布 ES6楼入,引入諸多新特性使得能夠編寫大型項(xiàng)目變成可能哥捕,標(biāo)準(zhǔn)自 2015 之后以年號(hào)代號(hào),每年一更

宿主環(huán)境部分

  • 在瀏覽器宿主環(huán)境包括 DOM + BOM 等
  • 在 Node嘉熊,宿主環(huán)境包括一些文件遥赚、數(shù)據(jù)庫(kù)、網(wǎng)絡(luò)阐肤、與操作系統(tǒng)的交互等
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末凫佛,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子孕惜,更是在濱河造成了極大的恐慌愧薛,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件衫画,死亡現(xiàn)場(chǎng)離奇詭異厚满,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)碧磅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)遵馆,“玉大人鲸郊,你說(shuō)我怎么就攤上這事』醯耍” “怎么了秆撮?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)换况。 經(jīng)常有香客問(wèn)我职辨,道長(zhǎng),這世上最難降的妖魔是什么戈二? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任舒裤,我火速辦了婚禮,結(jié)果婚禮上觉吭,老公的妹妹穿的比我還像新娘腾供。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布伴鳖。 她就那樣靜靜地躺著节值,像睡著了一般。 火紅的嫁衣襯著肌膚如雪榜聂。 梳的紋絲不亂的頭發(fā)上搞疗,一...
    開(kāi)封第一講書(shū)人閱讀 52,394評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音须肆,去河邊找鬼匿乃。 笑死,一個(gè)胖子當(dāng)著我的面吹牛休吠,可吹牛的內(nèi)容都是我干的扳埂。 我是一名探鬼主播,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼瘤礁,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼阳懂!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起柜思,我...
    開(kāi)封第一講書(shū)人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤岩调,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后赡盘,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體号枕,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年陨享,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了葱淳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡抛姑,死狀恐怖赞厕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情定硝,我是刑警寧澤皿桑,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站蔬啡,受9級(jí)特大地震影響诲侮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜箱蟆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一沟绪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧空猜,春花似錦近零、人聲如沸诺核。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)窖杀。三九已至,卻和暖如春裙士,著一層夾襖步出監(jiān)牢的瞬間入客,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工腿椎, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留桌硫,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓啃炸,卻偏偏與公主長(zhǎng)得像铆隘,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子南用,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359

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