摘要:春招季如何橫掃面試核心考點(diǎn)基礎(chǔ)版前端面試之路二基礎(chǔ)整理的繼承和的繼承有什么區(qū)別的繼承時(shí)通過(guò)或構(gòu)造函數(shù)機(jī)制來(lái)實(shí)現(xiàn)。作用創(chuàng)建私有變量,減少全局變量,防止變量名污染。異步瀏覽器訪問(wèn)服務(wù)器請(qǐng)求,用戶正常操作,瀏覽器后端進(jìn)行請(qǐng)求。
春招季如何橫掃 Javascript 面試核心考點(diǎn)(基礎(chǔ)版)?
前端面試之路二(javaScript基礎(chǔ)整理)
ES5的繼承時(shí)通過(guò)prototype或構(gòu)造函數(shù)機(jī)制來(lái)實(shí)現(xiàn)。ES5的繼承實(shí)質(zhì)上是先創(chuàng)建子類的實(shí)例對(duì)象,然后再將父類的方法添加到this上(Parent.apply(this))。
ES6的繼承機(jī)制完全不同,實(shí)質(zhì)上是先創(chuàng)建父類的實(shí)例對(duì)象this(所以必須先調(diào)用父類的super()方法),然后再用子類的構(gòu)造函數(shù)修改this。
具體的:ES6通過(guò)class關(guān)鍵字定義類,里面有構(gòu)造方法,類之間通過(guò)extends關(guān)鍵字實(shí)現(xiàn)繼承。子類必須在constructor方法中調(diào)用super方法,否則新建實(shí)例報(bào)錯(cuò)。因?yàn)樽宇悰](méi)有自己的this對(duì)象,而是繼承了父類的this對(duì)象,然后對(duì)其進(jìn)行加工。如果不調(diào)用super方法,子類得不到this對(duì)象。
ps:super關(guān)鍵字指代父類的實(shí)例,即父類的this對(duì)象。在子類構(gòu)造函數(shù)中,調(diào)用super后,才可使用this關(guān)鍵字,否則報(bào)錯(cuò)。
在一個(gè)函數(shù)里面嵌套另一個(gè)函數(shù),被嵌套的那個(gè)函數(shù)的作用域是一個(gè)閉包。
作用:創(chuàng)建私有變量,減少全局變量,防止變量名污染。可以操作外部作用域的變量,變量不會(huì)被瀏覽器回收,保存變量的值。
Object 是 JavaScript 中所有對(duì)象的父對(duì)象
數(shù)據(jù)封裝類對(duì)象:Object、Array、Boolean、Number、String
其他對(duì)象:Function、Argument、Math、Date、RegExp、Error
(1)創(chuàng)建一個(gè)空對(duì)象,并且 this 變量引用該對(duì)象,同時(shí)還繼承了該函數(shù)的原型。
(2)屬性和方法被加入到 this 引用的對(duì)象中。
(3)新創(chuàng)建的對(duì)象由 this 所引用,并且最后隱式的返回 this 。
同步的概念應(yīng)該是來(lái)自于操作系統(tǒng)中關(guān)于同步的概念:不同進(jìn)程為協(xié)同完成某項(xiàng)工作而在先后次序上調(diào)整(通過(guò)阻塞,喚醒等方式)。
同步強(qiáng)調(diào)的是順序性,誰(shuí)先誰(shuí)后;異步則不存在這種順序性。
同步:瀏覽器訪問(wèn)服務(wù)器請(qǐng)求,用戶看得到頁(yè)面刷新,重新發(fā)請(qǐng)求,等請(qǐng)求完,頁(yè)面刷新,新內(nèi)容出現(xiàn),用戶看到新內(nèi)容,進(jìn)行下一步操作。
異步:瀏覽器訪問(wèn)服務(wù)器請(qǐng)求,用戶正常操作,瀏覽器后端進(jìn)行請(qǐng)求。等請(qǐng)求完,頁(yè)面不刷新,新內(nèi)容也會(huì)出現(xiàn),用戶看到新內(nèi)容。
異步解決方式優(yōu)缺點(diǎn) 回調(diào)函數(shù)(callback)缺點(diǎn):回調(diào)地獄,不能用 try catch 捕獲錯(cuò)誤,不能 return
優(yōu)點(diǎn):解決了同步的問(wèn)題
Promise就是為了解決callback的問(wèn)題而產(chǎn)生的。
回調(diào)地獄的根本問(wèn)題在于:
缺乏順序性: 回調(diào)地獄導(dǎo)致的調(diào)試?yán)щy,和大腦的思維方式不符 嵌套函數(shù)存在耦合性,一旦有所改動(dòng),就會(huì)牽一發(fā)而動(dòng)全身,即(控制反轉(zhuǎn)) 嵌套函數(shù)過(guò)多的多話,很難處理錯(cuò)誤
Promise 實(shí)現(xiàn)了鏈?zhǔn)秸{(diào)用,也就是說(shuō)每次 then 后返回的都是一個(gè)全新 Promise,如果我們?cè)?then 中 return ,return 的結(jié)果會(huì)被 Promise.resolve() 包裝
優(yōu)點(diǎn):解決了回調(diào)地獄的問(wèn)題
缺點(diǎn):無(wú)法取消 Promise ,錯(cuò)誤需要通過(guò)回調(diào)函數(shù)來(lái)捕獲
特點(diǎn):可以控制函數(shù)的執(zhí)行,可以配合 co 函數(shù)庫(kù)使用
Async/awaitasync、await 是異步的終極解決方案
優(yōu)點(diǎn):代碼清晰,不用像 Promise 寫一大堆 then 鏈,處理了回調(diào)地獄的問(wèn)題
缺點(diǎn):await 將異步代碼改造成同步代碼,如果多個(gè)異步操作沒(méi)有依賴性而使用 await 會(huì)導(dǎo)致性能上的降低。
null: null表示空值,轉(zhuǎn)為數(shù)值時(shí)為0;
undefined:undefined表示"缺少值",就是此處應(yīng)該有一個(gè)值,但是還沒(méi)有定義。
? 變量被聲明了,但沒(méi)有賦值時(shí),就等于undefined。
? 對(duì)象沒(méi)有賦值的屬性,該屬性的值為undefined。
? 函數(shù)沒(méi)有返回值時(shí),默認(rèn)返回undefined。
JavaScript 原型: 每創(chuàng)建一個(gè)函數(shù),函數(shù)上都有一個(gè)屬性為 prototype,它的值是一個(gè)對(duì)象。 這個(gè)對(duì)象的作用在于當(dāng)使用函數(shù)創(chuàng)建實(shí)例的時(shí)候,那么這些實(shí)例都會(huì)共享原型上的屬性和方法。
原型鏈: 在 JavaScript 中,每個(gè)對(duì)象都有一個(gè)指向它的原型(prototype)對(duì)象的內(nèi)部鏈接(proto)。這個(gè)原型對(duì)象又有自己的原型,直到某個(gè)對(duì)象的原型為 null 為止(也就是不再有原型指向)。這種一級(jí)一級(jí)的鏈結(jié)構(gòu)就稱為原型鏈(prototype chain)。 當(dāng)查找一個(gè)對(duì)象的屬性時(shí),JavaScript 會(huì)向上遍歷原型鏈,直到找到給定名稱的屬性為止;到查找到達(dá)原型鏈的頂部(Object.prototype),仍然沒(méi)有找到指定的屬性,就會(huì)返回 undefined
如何獲取一個(gè)大于等于0且小于等于9的隨機(jī)整數(shù)function randomNum(){ return Math.floor(Math.random()*10) }想要去除一個(gè)字符串的第一個(gè)字符,有哪些方法可以實(shí)現(xiàn)
str.slice(1) str.substr(1) str.substring(1) str.replace(/./,"") str.replace(str.charAt(0),"")JavaScript的組成
JavaScript 由以下三部分組成:
ECMAScript(核心):JavaScript 語(yǔ)言基礎(chǔ) DOM(文檔對(duì)象模型):規(guī)定了訪問(wèn)HTML和XML的接口 BOM(瀏覽器對(duì)象模型):提供了瀏覽器窗口之間進(jìn)行交互的對(duì)象和方法到底什么是前端工程化、模塊化、組件化
前端工程化就是用做工程的思維看待和開發(fā)自己的項(xiàng)目,
而模塊化和組件化是為工程化思想下相對(duì)較具體的開發(fā)方式,因此可以簡(jiǎn)單的認(rèn)為模塊化和組件化是工程化的表現(xiàn)形式。
模塊化和組件化一個(gè)最直接的好處就是復(fù)用,同時(shí)我們也應(yīng)該有一個(gè)理念,模塊化和組件化除了復(fù)用之外還有就是分治,我們能夠在不影響其他代碼的情況下按需修改某一獨(dú)立的模塊或是組件,因此很多地方我們及時(shí)沒(méi)有很強(qiáng)烈的復(fù)用需要也可以根據(jù)分治需求進(jìn)行模塊化或組件化開發(fā)。
模塊化開發(fā)的4點(diǎn)好處:
1 避免變量污染,命名沖突 2 提高代碼復(fù)用率 3 提高維護(hù)性 4 依賴關(guān)系的管理
前端模塊化實(shí)現(xiàn)的過(guò)程如下:
一 函數(shù)封裝
我們?cè)谥v到函數(shù)邏輯的時(shí)候提到過(guò),函數(shù)一個(gè)功能就是實(shí)現(xiàn)特定邏輯的一組語(yǔ)句打包,在一個(gè)文件里面編寫幾個(gè)相關(guān)函數(shù)就是最開始的模塊了
function m1(){ //... } function m2(){ //... }
這樣做的缺點(diǎn)很明顯,污染了全局變量,并且不能保證和其他模塊起沖突,模塊成員看起來(lái)似乎沒(méi)啥關(guān)系
二 對(duì)象
為了解決這個(gè)問(wèn)題,有了新方法,將所有模塊成員封裝在一個(gè)對(duì)象中
var module = new Object({ _count:0, m1:function (){ ``` }, m2:function (){ ``` } })
這樣 兩個(gè)函數(shù)就被包在這個(gè)對(duì)象中, 嘿嘿 看起來(lái)沒(méi)毛病是嗎 繼續(xù)往下:
當(dāng)我們要使用的時(shí)候,就是調(diào)用這個(gè)對(duì)象的屬性
module.m1()
誒嘿 那么問(wèn)題來(lái)了 這樣寫法會(huì)暴露全部的成員,內(nèi)部狀態(tài)可以被外部改變,比如外部代碼可直接改變計(jì)數(shù)器的值
//壞人的操作
module._count = 10;
最后的最后,聰明的人類找到了究極新的方法——立即執(zhí)行函數(shù),這樣就可以達(dá)到不暴露私有成員的目的
var module = (function (){ var _count = 5; var m1 = function (){ ``` }; var m2 = function (){ ``` }; return{ m1:m1, m2:m2 } })()
參考鏈接: http://www.cnblogs.com/ihardc...
面向?qū)ο笈c面向過(guò)程什么是面向過(guò)程與面向?qū)ο螅?/p>
? 面向過(guò)程就是做圍墻的時(shí)候,由你本身操作,疊第一層的時(shí)候:放磚頭,糊水泥,放磚頭,糊水泥;然后第二層的時(shí)候,繼續(xù)放磚頭,糊水泥,放磚頭,糊水泥……
? 面向?qū)ο缶褪亲鰢鷫Φ臅r(shí)候,由他人幫你完成,將做第一層的做法抽取出來(lái),就是放磚頭是第一個(gè)動(dòng)作,糊水泥是第二個(gè)動(dòng)作,然后給這兩個(gè)動(dòng)作加上步數(shù),最后告訴機(jī)器人有 n 層,交給機(jī)器人幫你工作就行了。
為什么需要面向?qū)ο髮懛ǎ?/p>
? 更方便
? 可以復(fù)用,減少代碼冗余度
? 高內(nèi)聚低耦合
簡(jiǎn)單來(lái)說(shuō),就是增加代碼的可復(fù)用性,減少咱們的工作,使代碼更加流暢。
普通添加事件的方法:
var btn = document.getElementById("hello"); btn.onclick = function(){ alert(1); } btn.onclick = function(){ alert(2); }
執(zhí)行上面的代碼只會(huì)alert 2
事件綁定方式添加事件:
var btn = document.getElementById("hello"); btn.addEventListener("click",function(){ alert(1); },false); btn.addEventListener("click",function(){ alert(2); },false);
執(zhí)行上面的代碼會(huì)先alert 1 再 alert 2
普通添加事件的方法不支持添加多個(gè)事件,最下面的事件會(huì)覆蓋上面的,而事件綁定(addEventListener)方式添加事件可以添加多個(gè)。
addEventListener不兼容低版本IE
普通事件無(wú)法取消
addEventLisntener還支持事件冒泡+事件捕獲
由于字符串、對(duì)象和數(shù)組沒(méi)有固定大小,所有當(dāng)他們的大小已知時(shí),才能對(duì)他們進(jìn)行動(dòng)態(tài)的存儲(chǔ)分配。JavaScript程序每次創(chuàng)建字符串、數(shù)組或?qū)ο髸r(shí),解釋器都必須分配內(nèi)存來(lái)存儲(chǔ)那個(gè)實(shí)體。只要像這樣動(dòng)態(tài)地分配了內(nèi)存,最終都要釋放這些內(nèi)存以便他們能夠被再用,否則,JavaScript的解釋器將會(huì)消耗完系統(tǒng)中所有可用的內(nèi)存,造成系統(tǒng)崩潰。
現(xiàn)在各大瀏覽器通常用采用的垃圾回收有兩種方法:標(biāo)記清除、引用計(jì)數(shù)。
1、標(biāo)記清除
這是javascript中最常用的垃圾回收方式。當(dāng)變量進(jìn)入執(zhí)行環(huán)境是,就標(biāo)記這個(gè)變量為“進(jìn)入環(huán)境”。從邏輯上講,永遠(yuǎn)不能釋放進(jìn)入環(huán)境的變量所占用的內(nèi)存,因?yàn)橹灰獔?zhí)行流進(jìn)入相應(yīng)的環(huán)境,就可能會(huì)用到他們。當(dāng)變量離開環(huán)境時(shí),則將其標(biāo)記為“離開環(huán)境”。
垃圾收集器在運(yùn)行的時(shí)候會(huì)給存儲(chǔ)在內(nèi)存中的所有變量都加上標(biāo)記。然后,它會(huì)去掉環(huán)境中的變量以及被環(huán)境中的變量引用的標(biāo)記。而在此之后再被加上標(biāo)記的變量將被視為準(zhǔn)備刪除的變量,原因是環(huán)境中的變量已經(jīng)無(wú)法訪問(wèn)到這些變量了。最后。垃圾收集器完成內(nèi)存清除工作,銷毀那些帶標(biāo)記的值,并回收他們所占用的內(nèi)存空間。
關(guān)于這一塊,建議讀讀Tom大叔的幾篇文章,關(guān)于作用域鏈的一些知識(shí)詳解,讀完差不多就知道了,哪些變量會(huì)被做標(biāo)記。
2、引用計(jì)數(shù)
另一種不太常見(jiàn)的垃圾回收策略是引用計(jì)數(shù)。引用計(jì)數(shù)的含義是跟蹤記錄每個(gè)值被引用的次數(shù)。當(dāng)聲明了一個(gè)變量并將一個(gè)引用類型賦值給該變量時(shí),則這個(gè)值的引用次數(shù)就是1。相反,如果包含對(duì)這個(gè)值引用的變量又取得了另外一個(gè)值,則這個(gè)值的引用次數(shù)就減1。當(dāng)這個(gè)引用次數(shù)變成0時(shí),則說(shuō)明沒(méi)有辦法再訪問(wèn)這個(gè)值了,因而就可以將其所占的內(nèi)存空間給收回來(lái)。這樣,垃圾收集器下次再運(yùn)行時(shí),它就會(huì)釋放那些引用次數(shù)為0的值所占的內(nèi)存。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/101480.html
摘要:獲取的對(duì)象范圍方法獲取的是最終應(yīng)用在元素上的所有屬性對(duì)象即使沒(méi)有代碼,也會(huì)把默認(rèn)的祖宗八代都顯示出來(lái)而只能獲取元素屬性中的樣式。因此對(duì)于一個(gè)光禿禿的元素,方法返回對(duì)象中屬性值如果有就是據(jù)我測(cè)試不同環(huán)境結(jié)果可能有差異而就是。 花了很長(zhǎng)時(shí)間整理的前端面試資源,喜歡請(qǐng)大家不要吝嗇star~ 別只收藏,點(diǎn)個(gè)贊,點(diǎn)個(gè)star再走哈~ 持續(xù)更新中……,可以關(guān)注下github 項(xiàng)目地址 https:...
摘要:手冊(cè)網(wǎng)超級(jí)有用的前端基礎(chǔ)技術(shù)面試問(wèn)題收集前端面試題目及答案匯總史上最全前端面試題含答案常見(jiàn)前端面試題及答案經(jīng)典面試題及答案精選總結(jié)前端面試過(guò)程中最容易出現(xiàn)的問(wèn)題前端面試題整理騰訊前端面試經(jīng)驗(yàn)前端基礎(chǔ)面試題部分最新前端面試題攻略前端面試前端入 手冊(cè)網(wǎng):http://www.shouce.ren/post/index 超級(jí)有用的前端基礎(chǔ)技術(shù)面試問(wèn)題收集:http://www.codec...
摘要:手冊(cè)網(wǎng)超級(jí)有用的前端基礎(chǔ)技術(shù)面試問(wèn)題收集前端面試題目及答案匯總史上最全前端面試題含答案常見(jiàn)前端面試題及答案經(jīng)典面試題及答案精選總結(jié)前端面試過(guò)程中最容易出現(xiàn)的問(wèn)題前端面試題整理騰訊前端面試經(jīng)驗(yàn)前端基礎(chǔ)面試題部分最新前端面試題攻略前端面試前端入 手冊(cè)網(wǎng):http://www.shouce.ren/post/index 超級(jí)有用的前端基礎(chǔ)技術(shù)面試問(wèn)題收集:http://www.codec...
摘要:特意對(duì)前端學(xué)習(xí)資源做一個(gè)匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 特意對(duì)前端學(xué)習(xí)資源做一個(gè)匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 本以為自己收藏的站點(diǎn)多,可以很快搞定,沒(méi)想到一入?yún)R總深似海。還有很多不足&遺漏的地方,歡迎補(bǔ)充。有錯(cuò)誤的地方,還請(qǐng)斧正... 托管: welcome to git,歡迎交流,感謝star 有好友反應(yīng)和斧正,會(huì)及時(shí)更新,平時(shí)業(yè)務(wù)工作時(shí)也會(huì)不定期更...
摘要:詳解十大常用設(shè)計(jì)模式力薦深度好文深入理解大設(shè)計(jì)模式收集各種疑難雜癥的問(wèn)題集錦關(guān)于,工作和學(xué)習(xí)過(guò)程中遇到過(guò)許多問(wèn)題,也解答過(guò)許多別人的問(wèn)題。介紹了的內(nèi)存管理。 延遲加載 (Lazyload) 三種實(shí)現(xiàn)方式 延遲加載也稱為惰性加載,即在長(zhǎng)網(wǎng)頁(yè)中延遲加載圖像。用戶滾動(dòng)到它們之前,視口外的圖像不會(huì)加載。本文詳細(xì)介紹了三種延遲加載的實(shí)現(xiàn)方式。 詳解 Javascript十大常用設(shè)計(jì)模式 力薦~ ...
閱讀 1049·2021-09-13 10:29
閱讀 3396·2019-08-29 18:31
閱讀 2642·2019-08-29 11:15
閱讀 3019·2019-08-26 13:25
閱讀 1377·2019-08-26 12:00
閱讀 2313·2019-08-26 11:41
閱讀 3411·2019-08-26 10:31
閱讀 1493·2019-08-26 10:25