国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

前端面試??贾R點---js

BingqiChen / 3271人閱讀

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

1.同步和異步

詳細~
文章總結:

setTimeout(fn,ms)這個函數,是經過指定時間后,把要執行的任務加入到Event Queue中,又因為是單線程任務要一個一個執行,如果前面的任務需要的時間太久,那么只能等著,導致真正的延遲時間遠遠大于ms。
setInterval會每隔指定的時間將注冊的函數置入Event Queue,如果前面的任務耗時太久,那么同樣需要等待

setInterval為了避免代碼運行好幾次中間沒有間隔,當且僅當沒有該定時器的如何代碼實例時,才會將定時器代碼添加到隊列中,但這樣可能會引起:

某些間隔會被跳過

多個定時器的代碼執行時間可能會比預期小。

setTimeout(function(){

    //do something

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

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

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

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

分別把事件放入宏任務和微任務,這是一次循環,然后執行微任務,在開始下一次循環

2.閉包

關于閉包
理解起來還是覺得怪怪的

解決作用域的問題,讓函數內的變量可以被外部訪問

在函數a執行完并返回后,閉包使得Javascript的垃圾回收機制GC不會收回a所占用的資源,因為a的內部函數b的執行需要依賴a中的變量,造成內存浪費

函數式編程

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

四種方法

typeof

對于基本類型,除 null 以外,均可以返回正確的結果。

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

對于 null ,返回 object 類型。

對于 function 返回 function 類型。

instanceof

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

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

constructor

null 和 undefined 是無效的對象,因此是不會有 constructor 存在的,這兩種類型的數據需要通過其他方式來判斷。

函數的 constructor 是不穩定的,這個主要體現在自定義對象上,當開發者重寫 prototype 后,原有的 constructor 引用會丟失,constructor 會默認為 Object

toString

toString() 是 Object 的原型方法,調用該方法,默認返回當前對象的 [[Class]] 。這是一個內部屬性,其格式為 [object Xxx] ,其中 Xxx 就是對象的類型。

對于 Object 對象,直接調用 toString()  就能返回 [object Object] 。而對于其他對象,則需要通過 call / apply 來調用才能返回正確的類型信息。
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

需要后端配合,在后端會設置回調函數名、返回的數據等

documnet.domain

只能把document.domain設置成自身或更高一級的父域,且主域必須相同。例如:a.b.example.com 中某個文檔的document.domain 可以設成a.b.example.com、b.example.com 、example.com中的任意一個,但是不可以設成 c.a.b.example.com,因為這是當前域的子域,也不可以設成baidu.com,因為主域已經不相同了。就是只能子域獲取父域

如果想要獲取同級中其他頁面的數據,需要嵌入iframe,且把兩個頁面的document.domain設成父域

在頁面 http://www.example.com/a.html 中設置document.domain:

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

window.name

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

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

a.html

window.postMessage

調用postMessage方法的window對象是指要接收消息的那一個window對象,該方法的第一個參數message為要發送的消息,類型只能為字符串;第二個參數targetOrigin用來限定接收消息的那個window對象所在的域,如果不想限定域,可以使用通配符 * 。

需要接收消息的window對象,可是通過監聽自身的message事件來獲取傳過來的消息,消息內容儲存在該事件對象的data屬性中。

CORS

分為簡單請求和非簡單請求
需要后端設置:
Access-Control..................

6.實現一個雙向數據綁定

點我

view到model
比如input輸入框,監聽input輸入框的內容是否發生了變化,oninput事件

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

model到view
使用defineProperty的get和set

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

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

e.currentTarget始終指向添加監聽事件的那個對象,假如是ul,而e.target指向觸發事件監聽的那個對象,是li

注意:

把事件綁定在ul上,用e.target.nodeName.toLowerCase==="li"判定節點是不是li

嵌套時,可用循環,用while找到parentNode

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

8. async/await

promise實例
promise存在的問題

promise一旦執行,無法中途取消

promise的錯誤無法在外部被捕捉到,只能在內部進行預判處理

promise的內如何執行,監測起來很難

帶 async 關鍵字的函數,它使得你的函數的返回值必定是 promise 對象;await等的是右側「表達式」的結果(遇到await會讓出線程,但await后面那個緊跟著的那個函數不會被阻塞)

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/107682.html

相關文章

  • 前端面試常考識點---CSS

    摘要:在布局規則中提到計算的高度時,浮動元素也參與計算。因此,父元素在計算其高度時,加入了浮動元素的高度,順便達成了清除浮動的目標,所以父元素就包裹住了子元素。 前端面試常考知識點---js 1.CSS3的新特性有哪些 點我查看 CSS3選擇器 . CSS3邊框與圓角 CSS3圓角border-radius:屬性值由兩個參數值構成: value1 / value2,值之間用/分隔,v...

    騫諱護 評論0 收藏0
  • 前端事件綁定識點面試常考

    摘要:事件通常與函數配合使用,當事件發生時函數才會執行。的事件流是事件捕獲流,事件由根元素獲取并沿樹向下分發。通過添加事件,只能用刪除此事件。這主要得益于瀏覽器的事件冒泡機制。 簡介 事件是可以被 JavaScript 偵測到的行為。 網頁中的每個元素都可以產生某些可以觸發 JavaScript 函數或程序的事件。 事件通常與函數配合使用,當事件發生時函數才會執行。 執行JS 事件的方式: ...

    liujs 評論0 收藏0
  • 前端事件綁定識點面試???/em>)

    摘要:事件通常與函數配合使用,當事件發生時函數才會執行。的事件流是事件捕獲流,事件由根元素獲取并沿樹向下分發。通過添加事件,只能用刪除此事件。這主要得益于瀏覽器的事件冒泡機制。 簡介 事件是可以被 JavaScript 偵測到的行為。 網頁中的每個元素都可以產生某些可以觸發 JavaScript 函數或程序的事件。 事件通常與函數配合使用,當事件發生時函數才會執行。 執行JS 事件的方式: ...

    wizChen 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<