亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

前端面試??贾R(shí)點(diǎn)---js

BingqiChen / 3327人閱讀

摘要:上面實(shí)現(xiàn)了遞歸調(diào)用,這樣做的好處是在前一個(gè)定時(shí)器代碼執(zhí)行完成之前,不會(huì)向隊(duì)列插入新的定時(shí)代碼,確保不會(huì)有任何的缺失間隔。而且,它保證在下一次定時(shí)器代碼執(zhí)行之前,至少要等待指定的時(shí)間間隔。

1.同步和異步

詳細(xì)~
文章總結(jié):

setTimeout(fn,ms)這個(gè)函數(shù),是經(jīng)過(guò)指定時(shí)間后,把要執(zhí)行的任務(wù)加入到Event Queue中,又因?yàn)槭菃尉€程任務(wù)要一個(gè)一個(gè)執(zhí)行,如果前面的任務(wù)需要的時(shí)間太久,那么只能等著,導(dǎo)致真正的延遲時(shí)間遠(yuǎn)遠(yuǎn)大于ms。
setInterval會(huì)每隔指定的時(shí)間將注冊(cè)的函數(shù)置入Event Queue,如果前面的任務(wù)耗時(shí)太久,那么同樣需要等待

setInterval為了避免代碼運(yùn)行好幾次中間沒(méi)有間隔,當(dāng)且僅當(dāng)沒(méi)有該定時(shí)器的如何代碼實(shí)例時(shí),才會(huì)將定時(shí)器代碼添加到隊(duì)列中,但這樣可能會(huì)引起:

某些間隔會(huì)被跳過(guò)

多個(gè)定時(shí)器的代碼執(zhí)行時(shí)間可能會(huì)比預(yù)期小。

setTimeout(function(){

    //do something

    setTimeout(arguments.callee,interval);
},interval)

上面實(shí)現(xiàn)了遞歸調(diào)用,這樣做的好處是:在前一個(gè)定時(shí)器代碼執(zhí)行完成之前,不會(huì)向隊(duì)列插入新的定時(shí)代碼,確保不會(huì)有任何的缺失間隔。而且,它保證在下一次定時(shí)器代碼執(zhí)行之前,至少要等待指定的時(shí)間間隔。
講道理,我沒(méi)搞清楚,怎么就遞歸了
異步中的宏任務(wù)和微任務(wù)

macro-task(宏任務(wù)):包括整體代碼script,setTimeout,setInterval

micro-task(微任務(wù)):Promise,process.nextTick

分別把事件放入宏任務(wù)和微任務(wù),這是一次循環(huán),然后執(zhí)行微任務(wù),在開(kāi)始下一次循環(huán)

2.閉包

關(guān)于閉包
理解起來(lái)還是覺(jué)得怪怪的

解決作用域的問(wèn)題,讓函數(shù)內(nèi)的變量可以被外部訪問(wèn)

在函數(shù)a執(zhí)行完并返回后,閉包使得Javascript的垃圾回收機(jī)制GC不會(huì)收回a所占用的資源,因?yàn)閍的內(nèi)部函數(shù)b的執(zhí)行需要依賴a中的變量,造成內(nèi)存浪費(fèi)

函數(shù)式編程

3.如何判斷一個(gè)變量的類型?是Array類型?是Number類型?

四種方法

typeof

對(duì)于基本類型,除 null 以外,均可以返回正確的結(jié)果。

對(duì)于引用類型,除 function 以外,一律返回 object 類型。

對(duì)于 null ,返回 object 類型。

對(duì)于 function 返回 function 類型。

instanceof

在原型鏈上查找
//假設(shè)instanceof運(yùn)算符左邊是L,右邊是R
L instanceof R 
//instanceof運(yùn)算時(shí),通過(guò)判斷L的原型鏈上是否存在R.prototype
L.__proto__.__proto__ ..... === R.prototype ?
//如果存在返回true 否則返回false
注意:instanceof運(yùn)算時(shí)會(huì)遞歸查找L的原型鏈,即
L.__proto__.__proto__.__proto__.__proto__...
直到找到了或者找到頂層為止

instanceof檢測(cè)左側(cè)的__proto__原型鏈上,是否存在右側(cè)的prototype原型

constructor

null 和 undefined 是無(wú)效的對(duì)象,因此是不會(huì)有 constructor 存在的,這兩種類型的數(shù)據(jù)需要通過(guò)其他方式來(lái)判斷。

函數(shù)的 constructor 是不穩(wěn)定的,這個(gè)主要體現(xiàn)在自定義對(duì)象上,當(dāng)開(kāi)發(fā)者重寫(xiě) prototype 后,原有的 constructor 引用會(huì)丟失,constructor 會(huì)默認(rèn)為 Object

toString

toString() 是 Object 的原型方法,調(diào)用該方法,默認(rèn)返回當(dāng)前對(duì)象的 [[Class]] 。這是一個(gè)內(nèi)部屬性,其格式為 [object Xxx] ,其中 Xxx 就是對(duì)象的類型。

對(duì)于 Object 對(duì)象,直接調(diào)用 toString()  就能返回 [object Object] 。而對(duì)于其他對(duì)象,則需要通過(guò) call / apply 來(lái)調(diào)用才能返回正確的類型信息。
Object.prototype.toString.call(Symbol()); //[object Symbol]
Object.prototype.toString.call(undefined) ; // [object Undefined]
Object.prototype.toString.call(new Error()) ; // [object Error]

5.跨域

前四種方法 CORS

jsonp

需要后端配合,在后端會(huì)設(shè)置回調(diào)函數(shù)名、返回的數(shù)據(jù)等

documnet.domain

只能把document.domain設(shè)置成自身或更高一級(jí)的父域,且主域必須相同。例如:a.b.example.com 中某個(gè)文檔的document.domain 可以設(shè)成a.b.example.com、b.example.com 、example.com中的任意一個(gè),但是不可以設(shè)成 c.a.b.example.com,因?yàn)檫@是當(dāng)前域的子域,也不可以設(shè)成baidu.com,因?yàn)橹饔蛞呀?jīng)不相同了。就是只能子域獲取父域

如果想要獲取同級(jí)中其他頁(yè)面的數(shù)據(jù),需要嵌入iframe,且把兩個(gè)頁(yè)面的document.domain設(shè)成父域

在頁(yè)面 http://www.example.com/a.html 中設(shè)置document.domain:

在頁(yè)面 http://example.com/b.html 中也設(shè)置document.domain,而且這也是必須的,雖然這個(gè)文檔的domain就是example.com,但是還是必須顯示的設(shè)置document.domain的值:

window.name

在一個(gè)窗口(window)的生命周期內(nèi),窗口載入的所有的頁(yè)面都是共享一個(gè)window.name的,每個(gè)頁(yè)面對(duì)window.name都有讀寫(xiě)的權(quán)限,window.name是持久存在一個(gè)窗口載入過(guò)的所有頁(yè)面中的,并不會(huì)因新頁(yè)面的載入而進(jìn)行重置。
注意,window.name的值只能是字符串的形式,這個(gè)字符串的大小最大能允許2M左右甚至更大的一個(gè)容量,具體取決于不同的瀏覽器,但一般是夠用了。

假如www.baidu.com/a.html獲取不同域的www.baidu.com/data.html頁(yè)面中的值
data.html

a.html

window.postMessage

調(diào)用postMessage方法的window對(duì)象是指要接收消息的那一個(gè)window對(duì)象,該方法的第一個(gè)參數(shù)message為要發(fā)送的消息,類型只能為字符串;第二個(gè)參數(shù)targetOrigin用來(lái)限定接收消息的那個(gè)window對(duì)象所在的域,如果不想限定域,可以使用通配符 * 。

需要接收消息的window對(duì)象,可是通過(guò)監(jiān)聽(tīng)自身的message事件來(lái)獲取傳過(guò)來(lái)的消息,消息內(nèi)容儲(chǔ)存在該事件對(duì)象的data屬性中。

CORS

分為簡(jiǎn)單請(qǐng)求和非簡(jiǎn)單請(qǐng)求
需要后端設(shè)置:
Access-Control..................

6.實(shí)現(xiàn)一個(gè)雙向數(shù)據(jù)綁定

點(diǎn)我

view到model
比如input輸入框,監(jiān)聽(tīng)input輸入框的內(nèi)容是否發(fā)生了變化,oninput事件

// view到model
    var input = document.getElementById("a"),
    title = document.getElementById("title"); //title是文字展示區(qū)域的id
    input.oninput = function (e) {
        title.innerHTML = this.value;
    };

model到view
使用defineProperty的get和set

// model到view
    Object.defineProperty(input, "val", { //這里必須定義一個(gè)新的屬性名稱,不可以用value,否則會(huì)報(bào)錯(cuò)。
        get: function () {
            return this.value;
        },
        set: function (val) {
            this.value = val;
            title.innerHTML = val;
        }
    });
7. 事件委托

事件委托 target和currentTarget
假設(shè)事件綁定在ul上,ul有子元素li

e.currentTarget始終指向添加監(jiān)聽(tīng)事件的那個(gè)對(duì)象,假如是ul,而e.target指向觸發(fā)事件監(jiān)聽(tīng)的那個(gè)對(duì)象,是li

注意:

把事件綁定在ul上,用e.target.nodeName.toLowerCase==="li"判定節(jié)點(diǎn)是不是li

嵌套時(shí),可用循環(huán),用while找到parentNode

var ev = ev||window.event是事件的兼容寫(xiě)法
var target = ev.target||ev.srcElement是事件源的兼容寫(xiě)法

8. async/await

promise實(shí)例
promise存在的問(wèn)題

promise一旦執(zhí)行,無(wú)法中途取消

promise的錯(cuò)誤無(wú)法在外部被捕捉到,只能在內(nèi)部進(jìn)行預(yù)判處理

promise的內(nèi)如何執(zhí)行,監(jiān)測(cè)起來(lái)很難

帶 async 關(guān)鍵字的函數(shù),它使得你的函數(shù)的返回值必定是 promise 對(duì)象;await等的是右側(cè)「表達(dá)式」的結(jié)果(遇到await會(huì)讓出線程,但await后面那個(gè)緊跟著的那個(gè)函數(shù)不會(huì)被阻塞)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/107682.html

相關(guān)文章

  • 前端面試???/em>識(shí)點(diǎn)---CSS

    摘要:在布局規(guī)則中提到計(jì)算的高度時(shí),浮動(dòng)元素也參與計(jì)算。因此,父元素在計(jì)算其高度時(shí),加入了浮動(dòng)元素的高度,順便達(dá)成了清除浮動(dòng)的目標(biāo),所以父元素就包裹住了子元素。 前端面試??贾R(shí)點(diǎn)---js 1.CSS3的新特性有哪些 點(diǎn)我查看 CSS3選擇器 . CSS3邊框與圓角 CSS3圓角border-radius:屬性值由兩個(gè)參數(shù)值構(gòu)成: value1 / value2,值之間用/分隔,v...

    騫諱護(hù) 評(píng)論0 收藏0
  • 前端事件綁定識(shí)點(diǎn)面試???/em>)

    摘要:事件通常與函數(shù)配合使用,當(dāng)事件發(fā)生時(shí)函數(shù)才會(huì)執(zhí)行。的事件流是事件捕獲流,事件由根元素獲取并沿樹(shù)向下分發(fā)。通過(guò)添加事件,只能用刪除此事件。這主要得益于瀏覽器的事件冒泡機(jī)制。 簡(jiǎn)介 事件是可以被 JavaScript 偵測(cè)到的行為。 網(wǎng)頁(yè)中的每個(gè)元素都可以產(chǎn)生某些可以觸發(fā) JavaScript 函數(shù)或程序的事件。 事件通常與函數(shù)配合使用,當(dāng)事件發(fā)生時(shí)函數(shù)才會(huì)執(zhí)行。 執(zhí)行JS 事件的方式: ...

    liujs 評(píng)論0 收藏0
  • 前端事件綁定識(shí)點(diǎn)面試常考

    摘要:事件通常與函數(shù)配合使用,當(dāng)事件發(fā)生時(shí)函數(shù)才會(huì)執(zhí)行。的事件流是事件捕獲流,事件由根元素獲取并沿樹(shù)向下分發(fā)。通過(guò)添加事件,只能用刪除此事件。這主要得益于瀏覽器的事件冒泡機(jī)制。 簡(jiǎn)介 事件是可以被 JavaScript 偵測(cè)到的行為。 網(wǎng)頁(yè)中的每個(gè)元素都可以產(chǎn)生某些可以觸發(fā) JavaScript 函數(shù)或程序的事件。 事件通常與函數(shù)配合使用,當(dāng)事件發(fā)生時(shí)函數(shù)才會(huì)執(zhí)行。 執(zhí)行JS 事件的方式: ...

    wizChen 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<