js基礎(chǔ)

1.js作用域

js中的變量若在當(dāng)前作用域中沒有,會(huì)向父級尋找,直到最頂層。

2.塊級作用域

js ES5沒有塊級作用域。如果要形成,可以通過()()自執(zhí)行函數(shù)實(shí)現(xiàn)函數(shù)中的作用域?yàn)閴K級作用域;ES6中每一個(gè){}都是一個(gè)塊級作用域。

3.null和undifined的區(qū)別

null是變量被定義但無值,屬于空指針。undefined為從未聲明·。

4.講講閉包理解

指的是一個(gè)函數(shù)可以訪問另一個(gè)函數(shù)作用域中的變量,外層變量不會(huì)被垃圾回收機(jī)制回收。優(yōu)點(diǎn)是:避免全局變量污染。缺點(diǎn)是:榮故意造成內(nèi)存泄漏。

5.為什么閉包會(huì)造成內(nèi)存泄漏

閉包內(nèi)部的匿名函數(shù)在調(diào)用后把外層的變量也包含在自己的作用域內(nèi)了。此變量屬于一直引用中,所以垃圾回收機(jī)制不會(huì)將他回收,導(dǎo)致會(huì)比其他function占用更多內(nèi)存

6.如何解決閉包導(dǎo)致的內(nèi)存泄漏

調(diào)用時(shí)先用變量保存閉包函數(shù),在執(zhí)行完成后為此變量賦值為null,清除指針即可是垃圾回收機(jī)制正?;厥铡?.可以借助()()自執(zhí)行函數(shù),在閉包內(nèi)都不使用return function而是自執(zhí)行函數(shù)取代,因?yàn)樽詧?zhí)行函數(shù)是私有塊級作用域,即可在執(zhí)行結(jié)束后將引用對象銷毀。

7.其他場景的內(nèi)存泄漏及解決方案:

setTimeout及setInterval未在使用后清理,或循環(huán)多個(gè)定時(shí)任務(wù),clear時(shí)有缺漏。

解決方案:每個(gè)定時(shí)器應(yīng)使用變量保存,且在使用后clearTimeOut/clearInterval。


addEventerListener、jquery的on、vue的$on等引用dom后需要做解綁處理

? ? ? ? ? ? ? ? ? ? addEventerListener使用removeEventerlistener解綁

? ? ? ? ? ? ? ? ? ?Jquery.on使用.off解綁

? ? ? ? ? ? ? ? ? ? ?vue的$on使用$off解綁

Vue、react框架需要在生命周期的銷毀周期中執(zhí)行解綁操作,以及定時(shí)器清除。


實(shí)現(xiàn)instaceof:判斷實(shí)例的__proto__和類的prototype是否三等,并且返回結(jié)果。


script異步加載:defer、async、動(dòng)態(tài)創(chuàng)建dom(原生)

? ? ? ? ? ? ? ? defer是script腳本下載好,在dom加載完成后順序加載

? ? ? ? ? ? ? ? ?async是script腳本異步下載完成后自動(dòng)加載


跨域問題:

? ? ? ? ? ? ? ? ? ? ?React、vue中使用proxy設(shè)置域名即可

? ? ? ? ? ? ? ? ? ? ?ajax使用JSONP


事件循環(huán):js是單線程的。會(huì)優(yōu)先執(zhí)行宏任務(wù),執(zhí)行完全部宏任務(wù)后檢測是否有微任務(wù),

有的話將微任務(wù)一起執(zhí)行


微任務(wù)包括什么?

setTimeout、.then等


js消息隊(duì)列:主線程會(huì)將執(zhí)行過程中遇到的異步請求發(fā)送給這個(gè)消息隊(duì)列,

等到主線程空閑時(shí)再來執(zhí)行消息隊(duì)列中的任務(wù)。


數(shù)組借用filter來遍歷元素并按照規(guī)則篩選,返回新的數(shù)組


Flex:flex包含了flex-grow、flex-shrink、flex-basic

flex-grow:還有剩余空間時(shí),為此元素安排多少的空間

Flex-shrink:此元素寬度超出父級時(shí),壓縮多少

Flex-basic:指定元素寬度,優(yōu)先級高于width


盒模型:margin、border、padding、content


ie盒模型和普通的區(qū)別:ie的將border和padding計(jì)算至寬高內(nèi),而普通盒模型的寬高只計(jì)算content的真實(shí)寬高。


Box-sizing屬性會(huì)更改盒模型的標(biāo)準(zhǔn),content-box是普通盒模型,ie標(biāo)準(zhǔn)的是border-box。

獲取真實(shí)寬高使用window.getComputedStyle.width/height最為標(biāo)準(zhǔn)。


行內(nèi)元素margin上下無效,左右有效。padding均有效。


BFC:指一個(gè)通過特定條件達(dá)成的獨(dú)立容器,容器內(nèi)不不會(huì)受外部樣式影響

達(dá)成條件:

1.overflow除了visiable都可以,有scroll、hidden、auto。

float設(shè)置除了none都可以。

position設(shè)置了除了static都可以。

display設(shè)置:inline-block、table-cell、table-caption。

特性:

1.內(nèi)部元素會(huì)在垂直方向一個(gè)接一個(gè)的放置。

垂直方向元素距離靠上下文margin最大值來設(shè)置。

bfc內(nèi)區(qū)域不會(huì)和float區(qū)域重疊。

計(jì)算bfc區(qū)域高度時(shí)會(huì)將float的高度也算進(jìn)去

容器內(nèi)部的子元素不會(huì)影響外部元素


margin重疊:借助bfc的概念,使原本兩個(gè)受影響的元素,將其中一個(gè)增加bfc父級。因?yàn)閎fc的獨(dú)立容器屬性,不會(huì)影響外部元素。


清除浮動(dòng):1.使用偽類或空白塊元素占位。必須是display:block且增加clear:both。clearboth是使元素的左右兩側(cè)都不允許浮動(dòng)元素存在。

將父級設(shè)置為bfc,因?yàn)閎fc區(qū)域高度會(huì)將float的高度也算入,所以不會(huì)使父級無高度。

除了bfc還有ifc:ifc是行內(nèi)格式化書寫:按照水平方向放置,一行放不下折行。不接受上下邊距,只接受左右。

達(dá)成條件:在一個(gè)塊元素中只有行內(nèi)元素。


rem原理:通過設(shè)置html(根元素)的font-size。內(nèi)部元素的1rem?= 1*fontsize


http和https區(qū)別:http為名文傳輸,不安全。https多了ssl加密協(xié)議,為加密傳輸。


前端怎么修改?所有js和css、靜態(tài)文件加載https地址。


proxy跨域原理:首先是http和https會(huì)引發(fā)跨域,不同域名、不同端口都會(huì)引發(fā)跨域。proxy原理是npm?run?dev時(shí)node服務(wù)會(huì)將請求轉(zhuǎn)發(fā)至proxy設(shè)置好的域名地址,所以跨域這一步是在服務(wù)端中間件解決的。


axios攔截器原理:axios實(shí)例可以通過設(shè)置實(shí)例的interceptor.request/response.use方法,來設(shè)置拿到數(shù)據(jù)后的一些列操作。原理:給axios原型設(shè)置可共享方法,如果有攔截器,會(huì)添加到axios返回的promise對象中,請求攔截會(huì)在發(fā)起前調(diào)用,相應(yīng)攔截會(huì)在拿到response后調(diào)用,并根據(jù)攔截規(guī)則返回?cái)?shù)據(jù)。


小程序冷熱啟動(dòng):冷啟動(dòng)是小程序已經(jīng)被銷毀。熱啟動(dòng)是未被銷毀,再次打開。

冷啟動(dòng)會(huì)重新走app中的onLunch,熱啟動(dòng)不會(huì)觸發(fā),只會(huì)觸發(fā)onshow周期。

為什么會(huì)被銷毀?小程序占用內(nèi)存過高或小程序置入后臺超過5分鐘。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 11、數(shù)據(jù)類型檢測與toString方法的理解 1,typeof value (檢測一個(gè)值的類型:原始類型或者引用...
    萌妹撒閱讀 933評論 0 0
  • (掌握)什么是“use strict”,好處和壞處 use ‘strict’: "嚴(yán)格模式"是一種在JavaScr...
    Grit_1024閱讀 794評論 0 5
  • JavaScript ECMAScript(ES):規(guī)定了一些基礎(chǔ)核心的知識(變量、數(shù)據(jù)類型、語法規(guī)范、操作語句等...
    小K強(qiáng)閱讀 528評論 0 0
  • localStorage 永久存儲(chǔ) 本地永久存儲(chǔ),就算你關(guān)閉了瀏覽器,數(shù)據(jù)依然存在,除非你手動(dòng)清空掉它 local...
    曹昆_09a6閱讀 518評論 0 0
  • 1. split() join()的區(qū)別 join():用于把數(shù)組中的所有元素通過指定的分隔符進(jìn)行分隔放入一個(gè)字符...
    南崽閱讀 304評論 0 2

友情鏈接更多精彩內(nèi)容