黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

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

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

更新時間:2022-05-26 10:44:20 來源:動力節(jié)點 瀏覽1610次

1.談一談JavaScript作用域鏈

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

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

2.如何理解JavaScript原型鏈

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

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

當訪問對象的一個屬性時, 首先查找對象本身, 找到則返回; 若未找到, 則繼續(xù)查找其原型對象的屬性(如果還找不到實際上還會沿著原型鏈向上查找, 直至到根). 只要沒有被覆蓋的話, 對象原型的屬性就能在所有的實例中找到,若整個原型鏈未找到則返回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中完成了如下操作:

創(chuàng)建一個新的對象,這個對象的類型是object;

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

執(zhí)行構造函數;

返回新創(chuàng)建的對象。

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

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

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

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 婷婷伊人久久 | x8x8国产精品视频 | 波多野结衣一区免费作品 | jyzziyzzz免费视频国产 | 黄色网址在线视频 | 91短视频免费在线观看 | 亚洲欧美在线看 | 天天曰天天干 | 美女亚洲综合 | 香港三级日本三级三级人妇99 | 久久久网站亚洲第一 | 久久久亚洲精品国产 | 99精品视频在线播放2 | 黄色 在线| 曰皮在线播放免费 | 伊人网伊人| 成人av.com| 久久亚洲女同第一区 | 天天操天天爱天天干 | 农村寡妇一级毛片免费播放 | 一个人看的www高清在线观看 | 亚洲欧美国产精品第1页 | 成人影视 | 依欧美视频 | 黄色的视频网站 | 亚洲精品一二三四区 | 福利一区二区在线观看 | 日本黄色影片在线观看 | 午夜成a人片在线观看 | 国产精品成人在线 | 91亚洲国产成人久久精品网站 | 小明成人免费永久性看看 | 深夜影院老司机69影院 | 日本黄色小说网站 | 黄网站视频观看免费 | 欧洲成人在线视频 | 日韩在线播放视频 | 免费看美女毛片 | 免费欧美在线视频 | 成人免费午间影院在线观看 | 青草草在线观看 |