1. 程式人生 > 實用技巧 >前端面試(題三)js

前端面試(題三)js

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.函式的防抖與節流的簡單程式碼實現