手寫乙個call方法
// 在這之前需要重新認識一下call方法的執行操作
let mock = ;
function mocknum()
mocknum.call(mock) // 改變了函式中this的指向,當前this指向了mock物件
// 轉換一下實現方法就是
let mock =
}mock.mocknum();
// 所以經過上面這個操作的演化而來的結果就是如下步驟:
// 1. 將函式設為乙個物件的屬性
// 2. 並將這個函式的屬性呼叫
// 3. 刪除該函式
function.prototype.mycall = function(context)
// 操作一下
let mock = ;
function mocknum()
mocknum.mycall(mock) // value 1
2、bind
bind方法是直接返回乙個新的函式,需要手動去呼叫才能執行。
手寫乙個bind方法
// 例如:
let foo = ;
function bar()
let bindfoo = bar.bind(foo);
bindfoo() // 1 // 如果有返回值的情況下 bindfoo() === 1;
function.prototype.mybind = function(obj)
}}
3、講一下let、var、const的區別
4、手寫函式防抖與節流
防抖
function debounce(fn, wait, immediate)
// settimeout中使用箭頭函式,就是讓 this指向 返回的該閉包函式,而不是 debounce函式的呼叫者
timer = settimeout(() => , wait)
}}
節流
function throttle(fn, wait) , wait)}}
}
5、js跨域如何解決
目前暫時已知的跨域方法是:
6、script標籤如何實現非同步載入
另外值得注意的就是:deger指令碼會按照在頁面出現的順序載入,而async是不能保證載入順序的。
7、手寫js深拷貝
export const deepclone = data => else if (type === 'object')
} else
if (type === 'array')
} else if (type === 'object')
} return obj
}
持續更新中,敬請期待… 前端面試問題
1 對mvc的理解 簡單來說,mvc是一種流行的程式架構。mvc是 模型 model 檢視 view 控制器 control 的英文首字母的縮寫,核心思想是 檢視和使用者互動 通過事件導致控制器改變 控制器改變導致模型改變 或者控制器同時改變兩者 模型改變 導致檢視改變 或者檢視改變 潛在的從模型裡...
前端 面試問題
二.傳輸方式的分類 三.分組交換協議 四.tcp ip 參考模型。五.get 和 post 的區別 六.webpack 作業系統通過時間片輪轉機制,在多個程式之間進行切換,合理排程。這種方式叫做多任務排程。1.1分組交換協議 分組交換就是將大資料分裝成乙個個小包發給對方。1.2 各個分層的作用 傳輸...
前端面試問題(持續整理中。。。)
ajax流程講一下 了解promise嗎,簡單說一下 手寫乙個箭頭函式如何使用 實現乙個鏈式呼叫 寫個簡單的觀察者模式 陣列去重 let和const有什麼區別 如何判斷資料型別,如果遇到null呢 寫乙個正則,要求匹配 號區號 座機號,並且給區號新增上括號 mvc,mvp和mvvm的區別 筆試題to...