面試題

1.原型鏈

  • 在JavaScript中萬物都是對象羡洁,對象和對象之間也有關(guān)系辽话,并不是孤立存在的歇终。對象之間的繼承關(guān)系,在JavaScript中是通過prototype對象指向原型匙赞,再通過proto指向Object對象原型為止佛掖,這樣就形成了一個原型指向的鏈條妖碉,專業(yè)術(shù)語稱之為原型鏈。
  • 在原型上定義的屬性和方法芥被,創(chuàng)建出來的實(shí)例也會擁有原型上的屬性和方法
  • 實(shí)例上有屬性就用實(shí)例的屬性欧宜,實(shí)例上沒有就去找原型上的屬性,原型上沒有就去找原型的原型(原型鏈終極)上的屬性

2.this指向

1.方法調(diào)用拴魄,this指向擁有這個對象的本身
2.函數(shù)調(diào)用冗茸,this指向Windows
3.構(gòu)造函數(shù),this指向new出來的實(shí)例
4.上下文調(diào)用匹中,this指向(你要傳進(jìn)去)傳入的對象

  • 1.this 不能被賦值夏漱,但可以被 call/apply 改變
  • 2.this的指向在函數(shù)定義的時候是確定不了的,只有函數(shù)執(zhí)行的時候才能確定this到底指向誰顶捷,實(shí)際上this的最終指向的是那個最近調(diào)用它的對象
  • 3.return 和 this 只能出現(xiàn)在函數(shù)內(nèi)

3.作用域與預(yù)解析

作用域

  • 作用域: 只有方法(函數(shù))才有作用域挂绰,是指可訪問變量的集合(變量和函數(shù)可被訪問的范圍)----作用域產(chǎn)生于程序源代碼中定義變量的區(qū)域,在程序編碼階段就確定了服赎。javascript 中分為全局作用域(Global context: window/global )和局部作用域(Local Scope , 又稱為函數(shù)作用域 Function context)葵蒂。簡單講作用域就是當(dāng)前函數(shù)的生成環(huán)境或者上下文,包含了當(dāng)前函數(shù)內(nèi)定義的變量以及對外層作用域的引用重虑。

  • 作用域鏈:是一條變量對象的鏈,它和執(zhí)行期上下文(作用域)有關(guān),用于在處理標(biāo)識符的時候進(jìn)行變量查詢.践付,函數(shù)上下文的作用域鏈在函數(shù)調(diào)用的時候創(chuàng)建出來

預(yù)解析

  • 在當(dāng)前作用域中,JavaScript代碼執(zhí)行之前缺厉,瀏覽器首先會默認(rèn)的把所有帶var和function聲明的變量進(jìn)行提前的聲明或者定義永高。
  • 聲明:var num; 告訴瀏覽器在全局作用域中有一個num變量了,如果一個變量只是聲明了提针,但是沒有賦值命爬,默認(rèn)值是undefined。
  • 定義:num = 12; 定義就是給變量進(jìn)行賦值关贵。

  • 預(yù)解析只發(fā)生在當(dāng)前的作用域下
    var聲明的變量和function聲明的函數(shù)在預(yù)解析的時候有區(qū)別遇骑,var聲明的變量在預(yù)解析的時候只是提前的聲明卖毁,function聲明的函數(shù)在預(yù)解析的時候會提前聲明并且會同時定義揖曾。也就是說var聲明的變量和function聲明的函數(shù)的區(qū)別是在聲明的同時有沒同時進(jìn)行定義。

  • 預(yù)編譯:變量聲明聲明提升亥啦,函數(shù)聲明整體提升

JS運(yùn)行三部曲:

1炭剪、語法分析
2、預(yù)編譯
3翔脱、解釋執(zhí)行代碼

簡單總結(jié):變量聲明提升奴拦,函數(shù)聲明整體提升
具體:

1、創(chuàng)建一個AO對象(Activation Object)執(zhí)行期上下文
2届吁、尋找形參和變量聲明作為AO對象屬性名错妖,值為undefined
3绿鸣、將實(shí)參與形參統(tǒng)一
4、在函數(shù)體中尋找函數(shù)聲明暂氯,值為函數(shù)體潮模、

4.new關(guān)鍵字

在函數(shù)里面創(chuàng)建一個空對象,將函數(shù)里的this指向這個新創(chuàng)建的對象(xxx),再返回這個obj對象

1、創(chuàng)建一個空對象
var obj=new Object();

2痴施、設(shè)置原型鏈
obj.proto= Func.prototype;

3擎厢、讓Functionj中的this指向obj,并執(zhí)行Function的函數(shù)體辣吃。
var result =Func.call(obj);

4动遭、判斷Func的返回值類型:
如果是值類型,返回obj神得。如果是引用類型厘惦,就返回這個引用類型的對象。

5.閉包

  • 概念: 閉包就是有權(quán)訪另一個函數(shù)作用域中變量的函數(shù)
  • 產(chǎn)生的原因: 因?yàn)楹瘮?shù)作用域的問題
  • 形式: 比如一個a函數(shù)中return一個函數(shù)哩簿,在return得這個函數(shù)中使用a函數(shù)中的變量绵估,
  • 缺陷:
    • 因?yàn)樽兞吭诒皇褂盟詿o法被垃圾回收機(jī)制回收
    • 變量得不到釋放,增加內(nèi)存使用率,很容易造成內(nèi)存泄漏

6.pormise

1.回調(diào)地獄
function a(functionb(){
    c(function d(){
    
    })
})

我們發(fā)現(xiàn)上面代碼大量使用了回調(diào)函數(shù)(將一個函數(shù)作為參數(shù)傳遞給另個函數(shù))并且有許多 })結(jié)尾的符號,使得代碼看起來很混亂卡骂。

2.三個狀態(tài): pending(初始值国裳,等待), fulfilled(resolve)(代表操作成功),rejected(代表操作失斎纭)
3.promise使用:

有兩個·參數(shù):(resolve,recject),resolve接受成功的參數(shù)缝左,recject接受失敗的,解決回調(diào)地獄使用鏈?zhǔn)骄幊膛ㄈ簦趖hen回調(diào)中return一個新的promise渺杉。當(dāng)我們的頁面渲染需要所有請求數(shù)據(jù)一起回來是才開始,我們可以使用promise.all方法挪钓,這個方法的特性是需要等所有的請求結(jié)果回來是才執(zhí)行回調(diào)函數(shù).then(),說到這個還有一個promise.reace方法是越,它的特性是最先執(zhí)行完的請求去使用.then()回調(diào)函數(shù)當(dāng)然在平時使用我們一般會使用async await,

4.async/await:
  • 將異步請求變?yōu)橥酱a,同時的async/await無法捕獲錯誤碌上,我們需要使用倚评,try/catch來捕獲錯誤

  • 是一個用同步思維解決異步問題的方案
    async用于聲明一個函數(shù)是異步的。而await從字面意思上是“等待”的意思馏予,就是用于等待異步完成天梧。并且await只能在async函數(shù)中使用
    通常async、await都是跟隨Promise一起使用的

7.跨域

  • webSockets

  • websocket是一個實(shí)時通訊協(xié)議霞丧,可以和服務(wù)端建立一個通道:服務(wù)器可以主動向客戶端推送信息呢岗,客戶端也可以主動向服務(wù)端發(fā)送信息。

跨域
  • 跨域是由瀏覽器同源政策引起的,是指頁面請求的地址后豫,必須與頁面url地址處于(域名悉尾,端口,協(xié)議相同)挫酿,是為了防止某域名下的接口被其他域名下的網(wǎng)頁非法調(diào)用

解決跨域:

  • 1:jsonp(瀏覽器只對XHR請求有同源請求限制焕襟,而對script標(biāo)簽的src屬性,link標(biāo)簽的ref屬性饭豹,img標(biāo)簽的src屬性沒有這種限制鸵赖,利用這個漏洞就可以很好解決跨域問題。jsonp就是利用script標(biāo)簽沒有同源政策限制的特點(diǎn)來實(shí)現(xiàn)解決跨域問題的)
  • 2:代理服務(wù)器(因?yàn)橥凑呦拗浦淮嬖谟跒g覽器拄衰,服務(wù)器之間的請求是不受限制的它褪。通過一些方法設(shè)置代理,將不同域名轉(zhuǎn)換為相同的翘悉,客戶端發(fā)送請求是茫打,不直接發(fā)送到線上的服務(wù)器,而是先發(fā)送到本地的代理服務(wù)器妖混,再把代理服務(wù)器當(dāng)做一個跳板老赤,再將請求發(fā)送到線上服務(wù)器。同理制市,服務(wù)器的回應(yīng)也是先通過代理服務(wù)器再轉(zhuǎn)向客戶端)
  • 3:websocket(是一個持久化的實(shí)時通信協(xié)議抬旺,客戶端和服務(wù)端建立了一個通道)

8.Ajax

  • 異步請求對象,用于前后端數(shù)據(jù)交互的技術(shù)祥楣,可以在不重新加載網(wǎng)頁的情況下开财,局部更新網(wǎng)頁內(nèi)容的技術(shù)

  • 實(shí)現(xiàn):
    new一個XMLHttpRequest對象
    open 打開通道,設(shè)置請求的url參數(shù)误褪,一是請求類型责鳍,二是請求的url,可以帶參數(shù)兽间,動態(tài)傳遞參數(shù)到服務(wù)端
    send發(fā)送請求
    onreadystatechange只要狀態(tài)改變就會調(diào)用历葛,使用監(jiān)聽事件監(jiān)聽數(shù)據(jù)什么時候回來

9.get與post請求的區(qū)別

1.get在瀏覽器回退是是無害的,post會再次提交請求
2.post請求比get 請求慢
3.get請求URL地址會被標(biāo)識
4.post更安全
5.post可以發(fā)送的數(shù)據(jù)更大

10.防抖與節(jié)流

1.防抖
  • 原理:兩次點(diǎn)擊的時間間隔小于一定時間時嘀略,只執(zhí)行后一次
  • 實(shí)現(xiàn):聲明一個a變量不賦值恤溶,將一個定時器函數(shù)賦值給這個變量a,在未賦值前清除這個定時器,
  • 應(yīng)用場景:實(shí)現(xiàn)登錄功能時
2.節(jié)流
  • 原理:一段時間內(nèi)函數(shù)只執(zhí)行一次屎鳍,例子(好比一個漏水的水龍頭宏娄,隔一段時間會滴一滴水)
  • 實(shí)現(xiàn):在外部聲明一個變量a,賦值為true,相當(dāng)于是一個開關(guān),使用一個if判斷判斷條件是變量a逮壁,內(nèi)部放要執(zhí)行的函數(shù)體,在一進(jìn)入if的時候立馬將變量a賦值為false,再用一個定時器粮宛,內(nèi)部將變量a變?yōu)閠rue
  • 應(yīng)用場景:無限上拉刷新
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末窥淆,一起剝皮案震驚了整個濱河市卖宠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌忧饭,老刑警劉巖扛伍,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異词裤,居然都是意外死亡刺洒,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進(jìn)店門吼砂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來逆航,“玉大人,你說我怎么就攤上這事渔肩∫蚶” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵周偎,是天一觀的道長抹剩。 經(jīng)常有香客問我,道長蓉坎,這世上最難降的妖魔是什么澳眷? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮蛉艾,結(jié)果婚禮上境蔼,老公的妹妹穿的比我還像新娘。我一直安慰自己伺通,他們只是感情好箍土,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著罐监,像睡著了一般吴藻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上弓柱,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天沟堡,我揣著相機(jī)與錄音,去河邊找鬼矢空。 笑死航罗,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的屁药。 我是一名探鬼主播粥血,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了复亏?” 一聲冷哼從身側(cè)響起趾娃,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎缔御,沒想到半個月后抬闷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡耕突,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年笤成,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片眷茁。...
    茶點(diǎn)故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡炕泳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蔼卡,到底是詐尸還是另有隱情喊崖,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布雇逞,位于F島的核電站荤懂,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏塘砸。R本人自食惡果不足惜节仿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望掉蔬。 院中可真熱鬧廊宪,春花似錦、人聲如沸女轿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蛉迹。三九已至傅寡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間北救,已是汗流浹背荐操。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留珍策,地道東北人托启。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像攘宙,于是被迫代替她去往敵國和親屯耸。 傳聞我的和親對象是個殘疾皇子拐迁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評論 2 348

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