奇酷教育-Python培训|UI培训|WEB大前端培训|Unity3D培训|HTML5培训|人工智能培训|JAVA开发的教育品牌

您現(xiàn)在所在的位置:首頁 >學(xué)員就業(yè) > 就業(yè)寶典 > 前端經(jīng)典面試題之JavaScript篇

前端經(jīng)典面試題之JavaScript篇

來源:奇酷教育 發(fā)表于:

1 JavaScript基礎(chǔ)數(shù)據(jù)類型JavaScript數(shù)據(jù)類型包括原始類型和引用類型,原始類型有五個:Number(數(shù)值) String(字符串) Boolean(布爾

1 JavaScript基礎(chǔ)數(shù)據(jù)類型

JavaScript數(shù)據(jù)類型包括原始類型和引用類型,原始類型有五個:

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

引用類型有一個:

Object(對象)

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

^ 《JavaScript高級程序設(shè)計》: 
這實際上是JavaScript最初實現(xiàn)中的一個錯誤,后來被ECMAScript沿用了。現(xiàn)在null被認為是對象的占位符,從而解釋了這一矛盾。但是從技術(shù)上來說,它仍然是原始值。

2 談一談JavaScript作用域鏈

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

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

3 如何理解JavaScript原型鏈

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

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

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

4 JavaScript變量聲明提前

《JavaScript權(quán)威指南》中是這樣解釋的:JavaScript變量在聲明之前已經(jīng)可用,JavaScript的這個特性被非正式的稱為聲明提前(hoisting),即JavaScript函數(shù)中聲明的所有變量(但不涉及賦值)都被“提前”至函數(shù)的頂部。

從一個例子來看:

var scope = "global";

function myFunc(){

   console.log(scope);

   var scope = "local";

}

控制臺打印出來的不是“global”而是“undefined”,這是因為在myFunc這個函數(shù)的作用域中,局部變量scope聲明被提前至函數(shù)頂部,而此時,scope僅聲明,未賦值,因此輸出undefined。實際上,上面的代碼和下面的效果是一樣的:

var scope = "global";

function myFunc(){

   var scope;

   console.log(scope);

   scope = "local";

}

5 如何理解和應(yīng)用JavaScript閉包

關(guān)于閉包具體的定義文獻中給的概念很抽象,我認為閉包是一種使函數(shù)能夠都去其它函數(shù)的局部變量的語法機制。

舉個例子:

function outFunc(){

   var name = "Vicfeel";

   function inFunc(){

       console.log(name);

   }

   return inFunc;

}

inFunc(); //控制臺顯示"Vicfeel"

這這個例子我們可以看出,在函數(shù)inFunc中依然可以訪問outFunc的局部變量name。

閉包應(yīng)用舉例,模擬類的私有屬性,利用閉包的性質(zhì),局部變量只有在sayAge方法中才可以訪問,而name在外部也訪問,從而實現(xiàn)了類的私有屬性。

function User(){

   this.name = "Vicfeel";  //共有屬性

   var age = 23;    //私有屬性

   this.sayAge:function(){

       console.log("my age is " + age);

   }

}

var user = new User();

console.log(user.name); //"Vicfeel"

console.log(user.age);  //"undefined"

user.sayAge();   //"my age is 23"


6 new構(gòu)建對象的本質(zhì)

function User(){

   this.name = "Vicfeel";

   this.age = 23;

}

 

var user = new User();

通過new操作符,實際上在構(gòu)造函數(shù)User中完成了如下操作:

創(chuàng)建一個新的對象,這個對象的類型是object; 
設(shè)置這個新的對象的內(nèi)部、可訪問性和prototype屬性為構(gòu)造函數(shù)(指prototype.construtor所指向的構(gòu)造函數(shù))中設(shè)置的; 
執(zhí)行構(gòu)造函數(shù); 
返回新創(chuàng)建的對象。

function User(){

   //this = {};  

   //this.constructor = User;

   this.name = "Vicfeel";

   this.age = 23;

   //return this;

}

 

var user = new User();

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

7 JavaScript代理

當我們需要對很多元素添加事件的時候,可以通過將事件添加到它們的父節(jié)點而將事件委托給父節(jié)點來觸發(fā)處理函數(shù)。

比如我們需要向一個ul中動態(tài)添加很多個li,需要遍歷li逐個添加點擊事件

<ul id='list'></ul>

var count = 100;

var ulList = document.getElementById("list");

//動態(tài)構(gòu)建節(jié)點

for(var i = count;i--;){

   var liDom = document.createElement('li');

   ulList.appendChild(liDom);

}

//綁定點擊事件

var liNode = ulList.getElementByTagName("li");

for(var i=0, l = liNodes.length; i < l; i++){

   liNode[i].onClick = function(){

       //li點擊事件

   }

}

眾 所周知,DOM操作是十分消耗性能的。所以重復(fù)的事件綁定簡直是性能殺手。而事件代理的核心思想,就是通過盡量少的綁定,去監(jiān)聽盡量多的事件。如何做呢? 答案是利用事件冒泡機制,對其父節(jié)點ul進行事件綁定(Event Bubble),然后通過event.target來判斷是哪個節(jié)點觸發(fā)的事件,從而減少很多EventHandler的綁定。

var count = 100;

var ulList = document.getElementById("list");

//動態(tài)構(gòu)建節(jié)點

for(var i = count;i--;){

   var liDom = document.createElement('li');

   ulList.appendChild(liDom);

}

//綁定點擊事件

var liNode = ulList.getElementByTagName("li");

liNode.onClick = function(e){

   if(e.target && e.target.nodeName.toUpperCase == "LI") {

       // li點擊事件

   }

}

主站蜘蛛池模板: 有机肥设备生产制造厂家,BB掺混肥搅拌机、复合肥设备生产线,有机肥料全部加工设备多少钱,对辊挤压造粒机,有机肥造粒设备 -- 郑州程翔重工机械有限公司 | 南京和瑞包装有限公司 | 酒店厨房设计_中央厨房设计_北京商用厨房设计公司-奇能商厨 | 洗石机-移动滚筒式,振动,螺旋,洗矿机-青州冠诚重工机械有限公司 | 上海律师咨询_上海法律在线咨询免费_找对口律师上策法网-策法网 广东高华家具-公寓床|学生宿舍双层铁床厂家【质保十年】 | 双能x射线骨密度检测仪_dxa骨密度仪_双能x线骨密度仪_品牌厂家【品源医疗】 | 两头忙,井下装载机,伸缩臂装载机,30装载机/铲车,50装载机/铲车厂家_价格-莱州巨浪机械有限公司 | 无负压供水设备,消防稳压供水设备-淄博创辉供水设备有限公司 | 冷藏车-东风吸污车-纯电动环卫车-污水净化车-应急特勤保障车-程力专汽厂家-程力专用汽车股份有限公司销售二十一分公司 | 快干水泥|桥梁伸缩缝止水胶|伸缩缝装置生产厂家-广东广航交通科技有限公司 | 强效碱性清洗剂-实验室中性清洗剂-食品级高纯氮气发生器-上海润榕科学器材有限公司 | 传动滚筒,改向滚筒-淄博建凯机械科技有限公司 | 拉曼光谱仪_便携式|激光|显微共焦拉曼光谱仪-北京卓立汉光仪器有限公司 | 回转窑-水泥|石灰|冶金-巩义市瑞光金属制品有限责任公司 | 馋嘴餐饮网_餐饮加盟店火爆好项目_餐饮连锁品牌加盟指南创业平台 | 心得体会网_心得体会格式范文模板 | SOUNDWELL 编码器|电位器|旋转编码器|可调电位器|编码开关厂家-广东升威电子制品有限公司 | 对辊式破碎机-对辊制砂机-双辊-双齿辊破碎机-巩义市裕顺机械制造有限公司 | 软文发布平台 - 云软媒网络软文直编发布营销推广平台 | 二手光谱仪维修-德国OBLF光谱仪|进口斯派克光谱仪-热电ARL光谱仪-意大利GNR光谱仪-永晖检测 | 亮化工程,亮化设计,城市亮化工程,亮化资质合作,长沙亮化照明,杰奥思【官网】 | 板框压滤机-隔膜压滤机-厢式压滤机生产厂家-禹州市君工机械设备有限公司 | 综合管廊模具_生态,阶梯护坡模具_检查井模具制造-致宏模具厂家 | WF2户外三防照明配电箱-BXD8050防爆防腐配电箱-浙江沃川防爆电气有限公司 | 福建省教师资格证-福建教师资格证考试网 | 绿叶|绿叶投资|健康产业_绿叶投资集团有限公司 | 袋式过滤器,自清洗过滤器,保安过滤器,篮式过滤器,气体过滤器,全自动过滤器,反冲洗过滤器,管道过滤器,无锡驰业环保科技有限公司 | 气动隔膜阀_气动隔膜阀厂家_卫生级隔膜阀价格_浙江浙控阀门有限公司 | 编织人生 - 权威手工编织网站,编织爱好者学习毛衣编织的门户网站,织毛衣就上编织人生网-编织人生 | 无轨电动平车_轨道平车_蓄电池电动平车★尽在新乡百特智能转运设备有限公司 | 环氧乙烷灭菌器_压力蒸汽灭菌器_低温等离子过氧化氢灭菌器 _低温蒸汽甲醛灭菌器_清洗工作站_医用干燥柜_灭菌耗材-环氧乙烷灭菌器_脉动真空压力蒸汽灭菌器_低温等离子灭菌设备_河南省三强医疗器械有限责任公司 | 福兰德PVC地板|PVC塑胶地板|PVC运动地板|PVC商用地板-中国弹性地板系统专业解决方案领先供应商! 福建成考网-福建成人高考网 | 理化生实验室设备,吊装实验室设备,顶装实验室设备,实验室成套设备厂家,校园功能室设备,智慧书法教室方案 - 东莞市惠森教学设备有限公司 | 365文案网_全网创意文案句子素材站 | LED太阳能中国结|发光红灯笼|灯杆造型灯|节日灯|太阳能灯笼|LED路灯杆装饰造型灯-北京中海轩光电 | 不干胶标签-不干胶贴纸-不干胶标签定制-不干胶标签印刷厂-弗雷曼纸业(苏州)有限公司 | 隧道烘箱_隧道烘箱生产厂家-上海冠顶专业生产烘道设备 | Magnescale探规,Magnescale磁栅尺,Magnescale传感器,Magnescale测厚仪,Mitutoyo光栅尺,笔式位移传感器-苏州连达精密量仪有限公司 | 齿轮减速电机一体机_蜗轮蜗杆减速马达-德国BOSERL齿轮减速机带电机生产厂家 | 磁力去毛刺机_去毛刺磁力抛光机_磁力光饰机_磁力滚抛机_精密金属零件去毛刺机厂家-冠古科技 | 沈阳激光机-沈阳喷码机-沈阳光纤激光打标机-沈阳co2激光打标机 |