前端面試(題三)js
阿新 • • 發佈:2020-08-03
1.call、apply及bind的區別
2.自己實現instanceof (考點:原型鏈;遞迴)
3.自己實現new (考點:JS物件的實現化;原型鏈)
5.判斷一個數據的型別
①. toString.call()
②. typeof
6.js深拷貝
function deepCopy (source) { var target = Array.isArray(source) ? [] : {}; for (let key in source) { if (source.hasOwnProperty(key)) {if (typeof source[key] === 'object') { target[key] = deepCopy(source[key]); } else { target[key] = source[key]; } } } return target; }
7,輸出結果
function test(n, o) { console.log(o); return { test: function (m) {return test(m, n); } }; } var a = test(0); a.test(1); a.test(2); var b = test(0).test(1).test(2).test(3); var c = test(0).test(1); c.test(2); c.test(3);
輸出參考:
undefined
0
0
undefined
0
1
2
undefined
0
1
1
8.async/await的瞭解
async函式返回的是一個promise物件,如果async函式中有return語句,那麼promise物件resolve拿到的資料就是這個return後的資料。如果沒有,那麼就是undefined。async函式的內部是同步的方式執行的。
9.建構函式的理解
function Person(name){ this.name = name; return name; } let p1 = new Person('Tom'); function Person(name){ this.name = name; return {}; } let p2 = new Person('Tom');
p1為{name:‘Tom’},而p2為{}。
解釋:建構函式不需要顯示的返回值。使用new來建立物件(呼叫建構函式)時,如果return的是非物件(數字、字串、布林型別等)會忽略返回值,返回的是this;如果return的是物件,則返回該物件(注:若return null也會忽略返回值)。
10.函式的防抖與節流的簡單程式碼實現