1牙勘、函數(shù)防抖和函數(shù)節(jié)流
? ? ? ? 概念
? ??????????函數(shù)防抖(debounce):函數(shù)防抖隅津,就是指觸發(fā)事件后在 n 秒內(nèi)函數(shù)只能執(zhí)行一次散劫,如果在 n 秒內(nèi)又觸發(fā)了事件韧涨,則會重新計算函數(shù)執(zhí)行時間牍戚。簡單的說,當一個動作連續(xù)觸發(fā)虑粥,則只執(zhí)行最后一次如孝。
? ??????????函數(shù)節(jié)流(throttle):限制一個函數(shù)在一定時間內(nèi)只能執(zhí)行一次。
? ??????常見應用場景
? ? ? ? ?函數(shù)防抖的應用場景:
????????????連續(xù)的事件娩贷,只需觸發(fā)一次回調(diào)的場景有:
? ? ? ? ? ? ? ? 搜索框搜索輸入第晰。只需用戶最后一次輸入完,再發(fā)送請求彬祖, 手機號茁瘦、郵箱驗證輸入檢測, 窗口大小Resize储笑。只需窗口調(diào)整完成后甜熔,計算窗口大小。防止重復渲染突倍。
? ? ? ? ?函數(shù)節(jié)流的應用場景
? ? ? ? ? ? ?間隔一段時間執(zhí)行一次回調(diào)的場景有: 滾動加載腔稀,加載更多或滾到底部監(jiān)聽,谷歌搜索框赘方,搜索聯(lián)想功能烧颖,高頻點擊提交,表單重復提交
? ? ? ? ?實現(xiàn)原理
? ??????????????函數(shù)防抖的簡單實現(xiàn):
? ? ? ? ? ? ? 函數(shù)節(jié)流(throttle)
? ??????異同比較
? ??????????????相同點:
????????????????????都可以通過使用setTimeout實現(xiàn)踩衩。
????????????????????目的都是,降低回調(diào)執(zhí)行頻率。節(jié)省計算資源驱富。
? ? ? ? ? ? ? ?不同點:
? ??????????????????函數(shù)防抖锚赤,在一段連續(xù)操作結(jié)束后,處理回調(diào)褐鸥,利用 clearTimeout 和setTimeout 實現(xiàn)线脚。函數(shù)節(jié)流,在一段連續(xù)操作中叫榕,每一段時間只執(zhí)行一次浑侥,頻率較高的事件中使用來提高性能。
? ??????????????????函數(shù)防抖關(guān)注一定時間連續(xù)觸發(fā)晰绎,只在最后執(zhí)行一次寓落,而函數(shù)節(jié)流側(cè)重于一段時間內(nèi)只執(zhí)行一次。
2寒匙、eval是做什么的零如。
? ? 概念:eval() 把字符串解析為js代碼并返回。
? ??如果參數(shù)是一個表達式锄弱,eval() 函數(shù)將執(zhí)行表達式考蕾。如果參數(shù)是Javascript語句,eval()將執(zhí)行 Javascript 語句会宪。
? ? 實例
? ??<script>
????????eval("x=10;y=20;document.write(x*y)");
????????document.write("<br>" + eval("2+2"));
????????document.write("<br>" + eval(x+17));
????</script>
3肖卧、哪些操作造成內(nèi)存泄漏
? ? 內(nèi)存泄漏:就是沒有使用或已經(jīng)使用的完的變量,沒有及時的回收掸鹅。
? ? Javascript常見的內(nèi)存泄漏:
? ? 一塞帐、意外的全局變量
? ? ? ? (1)初始化未經(jīng)聲明的變量,總是會創(chuàng)建一個全局變量
? ??????????function f1(){
? ? ? ? ? ? ????//初始化這個變量沒有聲明巍沙,成為全局變量葵姥,不會自動被回收
????????????????bar ="this is a global variable"http://
? ? ? ? ? ? ?????window.bar = "this is a global variable"
? ????????}
? ? ? ? (2)由this創(chuàng)建的全局變量
? ??????????function f1(){
? ? ? ? ? ???? this.bar ="this is a global variable"? ? ? ??
????????????}
? ? ???????? f1()
? ? ? ? 注意:有些全局變量產(chǎn)生的垃圾,不可回收句携,尤其當全局變量用于臨時存儲和處理大量信息的時候榔幸,確保用完之后將他設置為null
? ? 二、計時器或回調(diào)函數(shù)
? ? ? ? 注意:一旦定時器不需要矮嫉,需要移除削咆。
? ? 三、dom清空或刪除時事件未清除導致內(nèi)存泄漏
? ? 四蠢笋、閉包
? ??????匿名函數(shù)可以訪問父級作用域中的變量拨齐。
? ? 五、子元素存在引起的內(nèi)存泄漏昨寞。
4瞻惋、進程與線程的區(qū)別
? ??1.進程是運行中的程序厦滤,線程是進程的內(nèi)部的一個執(zhí)行序列
????2. 進程是資源分配的單元,線程是執(zhí)行行單元
????3. 進程間切換代價大熟史,線程間切換代價小
? ? 4. 進程擁有資源多馁害,線程擁有資源少
????5. 多個線程共享進程的資源
????這種題目,專業(yè)術(shù)語不好理解蹂匹,采用形象一點的比喻更好,比如(取自知乎):
????開個QQ凹蜈,開了一個進程限寞;開了迅雷,開了一個進程仰坦。
????在QQ的這個進程里履植,傳輸文字開一個線程、傳輸語音開了一個線程悄晃、彈出對話框又開了一個線程玫霎。 所以運行某個軟件,相當于開了一個進程妈橄。在這個軟件運行的過程里(在這個進程里)庶近,多個工作支撐的完成QQ的運行,那么這“多個工作”分別有一個線程眷蚓。所以一個進程管著多個線程鼻种。
????通俗的講:“進程是爹媽,管著眾多的線程兒子”…