大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 常見的Java前端面試題及答案

常見的Java前端面試題及答案

更新時間:2022-05-26 10:44:20 來源:動力節點 瀏覽1559次

1.談一談JavaScript作用域鏈

當執行一段JavaScript代碼(全局代碼或函數)時,JavaScript引擎會創建為其創建一個作用域又稱為執行上下文(Execution Context),在頁面加載后會首先創建一個全局的作用域,然后每執行一個函數,會建立一個對應的作用域,從而形成了一條作用域鏈。每個作用域都有一條對應的作用域鏈,鏈頭是全局作用域,鏈尾是當前函數作用域。

作用域鏈的作用是用于解析標識符,當函數被創建時(不是執行),會將this、arguments、命名參數和該函數中的所有局部變量添加到該當前作用域中,當JavaScript需要查找變量X的時候(這個過程稱為變量解析),它首先會從作用域鏈中的鏈尾也就是當前作用域進行查找是否有X屬性,如果沒有找到就順著作用域鏈繼續查找,直到查找到鏈頭,也就是全局作用域鏈,仍未找到該變量的話,就認為這段代碼的作用域鏈上不存在x變量,并拋出一個引用錯誤(ReferenceError)的異常。

2.如何理解JavaScript原型鏈

JavaScript中的每個對象都有一個prototype屬性,我們稱之為原型,而原型的值也是一個對象,因此它也有自己的原型,這樣就串聯起來了一條原型鏈,原型鏈的鏈頭是object,它的prototype比較特殊,值為null。

原型鏈的作用是用于對象繼承,函數A的原型屬性(prototype property)是一個對象,當這個函數被用作構造函數來創建實例時,該函數的原型屬性將被作為原型賦值給所有對象實例,比如我們新建一個數組,數組的方法便從數組的原型上繼承而來。

當訪問對象的一個屬性時, 首先查找對象本身, 找到則返回; 若未找到, 則繼續查找其原型對象的屬性(如果還找不到實際上還會沿著原型鏈向上查找, 直至到根). 只要沒有被覆蓋的話, 對象原型的屬性就能在所有的實例中找到,若整個原型鏈未找到則返回undefined;

3.JavaScript基礎數據類型

JavaScript數據類型包括原始類型和引用類型,原始類型有五個:

Number(數值) String(字符串) Boolean(布爾) Null(空) Undefined(未定義)

引用類型有一個:

Object(對象)

通過typeof(x)可以返回一個變量x的數據類型“number”、“string”、“boolean”、“undefined”、"object",這里要注意一點:typeof運算符對于null類型返回的是object。

4.數組去重的實現

基本數組去重

Array.prototype.unique = function(){
    var result = [];
    this.forEach(function(v){
        if(result.indexOf(v) < 0){
            result.push(v);
        }
    });
    return result;
}

利用hash表去重,這是一種空間換時間的方法

Array.prototype.unique = function(){
    var result = [],hash = {};
    this.forEach(function(v){
        if(!hash[v]){
            hash[v] = true;
            result.push(v);
        }
    });
    return result;
}

上面的方法存在一個bug,對于數組[1,2,'1','2',3],去重結果為[1,2,3],原因在于對象對屬性索引時會進行強制類型轉換,arr[‘1’]和arr[1]得到的都是arr[1]的值,因此需做一些改變:

Array.prototype.unique = function(){
    var result = [],hash = {};
    this.forEach(function(v){
        var type = typeof(v);  //獲取元素類型
        hash[v] || (hash[v] = new Array());
        if(hash[v].indexOf(type) < 0){
            hash[v].push(type);  //存儲類型
            result.push(v);
        }
    });
    return result;
}

先排序后去重

Array.prototype.unique = function(){
    var result = [this[0]];
    this.sort();
    this.forEach(function(v){
    v!=result[result.length -1] && result.push(v);//僅與result最后一個元素比較
    });
}

5.new構建對象的本質

    function User(){
        this.name = "Vicfeel";
        this.age = 23;
    }    
    var user = new User();

通過new操作符,實際上在構造函數User中完成了如下操作:

創建一個新的對象,這個對象的類型是object;

設置這個新的對象的內部、可訪問性和prototype屬性為構造函數(指prototype.construtor所指向的構造函數)中設置的;

執行構造函數;

返回新創建的對象。

    function User(){
        //this = {};  
        //this.constructor = User;
        this.name = "Vicfeel";
        this.age = 23;
        //return this;
    }    
    var user = new User();

如果構造函數默認返回的新創建的this對象,如果手動return 一個變量的話,如果該變量是原始類型則無效,如果是對象,則返回該對象。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 国产精品自拍亚洲 | 欧美日韩一区二区综合在线视频 | 久国产精品久久精品国产四虎 | 五月天婷婷在线视频 | 橘梨纱视频一区二区在线观看 | 福利资源站 | 欧美一区精品二区三区 | 99热在线免费观看 | 成人午夜精品网站在线观看 | 国产一区日韩二区欧美三 | 日本成人一区二区三区 | 亚洲综合精品 | 狠狠色狠狠色88综合日日91 | 国产福利不卡视频在免费 | 114一级毛片免费观看 | 美女视频国产 | 国产成人亚洲影视在线 | 爱爱一级视频 | 四虎国产精品永久在线网址 | 一本伊大人香蕉高清在线观看 | 久久精品在线免费观看 | 男女羞羞视频免费观看 | 天天干狠狠 | 久久国产视频网站 | 在线观看国产情趣免费视频 | 九草伊人 | 亚洲精品一区二区在线播放 | 我要看免费的毛片 | 国产精品久久久久久久伊一 | 亚洲国产视频在线观看 | 毛片免费观看的视频 | 伊人亚洲 | 亚洲天堂欧美 | 天天做天天看夜夜爽毛片 | 国内精品久久久久影院日本 | 四虎影院免费观看 | 欧美成人精品久久精品 | 久久精品综合 | 色资源在线 | 国产精品二区高清在线 | 一级欧美在线的视频 |