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

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

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 国产日产欧美精品一区二区三区 | 欧美一级免费大片 | xxxx免费国产在线视频 | 黄频免费观看 | 国产亚洲一欧美一区二区三区 | 欧美午夜视频一区二区三区 | 久久水蜜桃 | 国产精品成人麻豆专区 | 免费看人做人爱视频拍拍拍 | 中文一级黄色片 | 欧美日韩片 | 99热久久久久久久免费观看 | 成人午夜在线视频 | 四虎永久免费地ww4hu57 | 看毛片免费 | 免费看国产精品久久久久 | 国产在线精品福利91香蕉 | 色综合色狠狠天天综合色 | 香蕉在线观看999 | 欧美一级毛片国产一级毛片 | 亚洲黄色录像 | 天天操伊人 | 高清成人综合 | jizz中国妇女 | 免费日本黄色网址 | 秘密影院久久综合亚洲综合 | 狠狠干艹| 日本一级看片免费播放 | 天天操天天看 | 日本不卡免费在线 | 黄色一及毛片 | 欧美xxx午夜免费视频 | 国产高清在线精品免费 | 国产精品成人不卡在线观看 | 手机在线国产精品 | 成人一级片 | 性欧美视频在线观看 | 亚洲国产中文字幕在线观看 | 欧美深度肠交惨叫 | 国产精品久久久久久久久久久不卡 | 国自产拍在线天天更新91 |