大战熟女丰满人妻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 一個變量的話,如果該變量是原始類型則無效,如果是對象,則返回該對象。

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

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 久久性生活视频 | 美女羞羞视频 | 日韩 欧美 自拍 在线 视频 | 97久久伊人精品影院 | 91网站国产 | 中文字幕视频二区 | 欧美一级成人一区二区三区 | 岛国片欧美一级毛片 | 全部毛片 | 亚洲精品区一区二区三区四 | 国自产拍在线视频天天更新 | 国产女主播喷出白浆视频 | 99在线视频播放 | 色婷婷中文字幕 | 久久久精品久久视频只有精品 | 久久久久亚洲 | 精品久久洲久久久久护士 | 亚洲精品www久久久久久久软件 | 最新仑乱免费视频 | 日本高清免费毛片久久看 | 欧美日韩一区二区综合在线视频 | 亚洲欧美日韩成人网 | 亚洲黄色激情视频 | 亚洲精品第一国产麻豆 | 四虎影视库国产精品一区 | 亚洲高清美女一区二区三区 | 亚洲国产成人久久综合碰 | 日韩中文字幕在线观看 | 五月婷婷婷婷 | 中文字幕日韩精品麻豆系列 | 四虎网站在线观看 | 欧美一级视频免费观看 | 天天干夜夜夜 | 日韩精品国产自在久久现线拍 | 一级毛片免费播放 | 久热免费 | 国产日韩精品一区二区 | 午夜久久久久久 | 色天天综合久久久久综合片 | 国产麻豆之光e奶女教师 | 欧美香蕉在线 |