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

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

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

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

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 一個變量的話,如果該變量是原始類型則無效,如果是對象,則返回該對象。

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

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 在线观看亚洲精品国产 | 日韩精品另类天天更新影院 | 国产成人精品视频一区二区不卡 | 国产粉嫩白浆在线观看 | 亚洲综合一区二区精品久久 | 不卡网站| 免费观看黄色a一级录像 | 宅男看片午夜大片啪啪mv | 国产高清区 | 女人大毛片一级毛片一 | 亚洲一区二区三区免费视频 | 国产极品嫩模大尺度福利视频 | 日韩欧美一区二区三区四区 | 中文字幕在线免费观看视频 | 国产亚洲高清在线精品99 | 亚洲精品www | 国产成人精品久久亚洲高清不卡 | 久久免费视频在线观看30 | 亚洲精品国产成人专区 | 男人都懂的网站 | 九九视频只有精品 | 999精品久久久中文字幕蜜桃 | 福利色姬网站视频入口 | 亚洲美女视频网址 | 一级特黄aaa大片免费看 | 国产激情视频趣趣在线观看的 | 成人禁在线观看午夜亚洲 | 亚洲国产第一 | 免费看搡女人的视频 | 欧美成人久久 | 免费人成年短视频在线观看网站 | www.狠狠| 久久香蕉国产线看观看8青草 | 国产精片 | 免费看欧美一级特黄α大片 | 亚洲精品日本 | 天天操天天干天天操 | 欧美黄色免费在线观看 | 中文字幕伊人 | 全部毛片 | 青草91视频免费观看 |