国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

[前端求職必看]前端開(kāi)發(fā)面試題與答案精選_JavaScript
天蓬老師
天蓬老師 2017-11-13 13:04:27
0
0
1765

JavaScript

JavaScript原型,原型鏈 ? 有什么特點(diǎn)?

eval是做什么的?

它的功能是把對(duì)應(yīng)的字符串解析成JS代碼并運(yùn)行;
應(yīng)該避免使用eval,不安全,非常耗性能(2次,一次解析成js語(yǔ)句,一次執(zhí)行)。

null,undefined 的區(qū)別?

寫(xiě)一個(gè)通用的事件偵聽(tīng)器函數(shù)。

? ?// event(事件)工具集,來(lái)源:github.com/markyun
? ?markyun.Event = {
? ? ? ?// 頁(yè)面加載完成后
? ? ? ?readyEvent : function(fn) {
? ? ? ? ? ?if (fn==null) {
? ? ? ? ? ? ? ?fn=document;
? ? ? ? ? ?}
? ? ? ? ? ?var oldonload = window.onload;
? ? ? ? ? ?if (typeof window.onload != 'function') {
? ? ? ? ? ? ? ?window.onload = fn;
? ? ? ? ? ?} else {
? ? ? ? ? ? ? ?window.onload = function() {
? ? ? ? ? ? ? ? ? ?oldonload();
? ? ? ? ? ? ? ? ? ?fn();
? ? ? ? ? ? ? ?};
? ? ? ? ? ?}
? ? ? ?},
? ? ? ?// 視能力分別使用dom0||dom2||IE方式 來(lái)綁定事件
? ? ? ?// 參數(shù): 操作的元素,事件名稱(chēng) ,事件處理程序
? ? ? ?addEvent : function(element, type, handler) {
? ? ? ? ? ?if (element.addEventListener) {
? ? ? ? ? ? ? ?//事件類(lèi)型、需要執(zhí)行的函數(shù)、是否捕捉
? ? ? ? ? ? ? ?element.addEventListener(type, handler, false);
? ? ? ? ? ?} else if (element.attachEvent) {
? ? ? ? ? ? ? ?element.attachEvent('on' + type, function() {
? ? ? ? ? ? ? ? ? ?handler.call(element);
? ? ? ? ? ? ? ?});
? ? ? ? ? ?} else {
? ? ? ? ? ? ? ?element['on' + type] = handler;
? ? ? ? ? ?}
? ? ? ?},
? ? ? ?// 移除事件
? ? ? ?removeEvent : function(element, type, handler) {
? ? ? ? ? ?if (element.removeEnentListener) {
? ? ? ? ? ? ? ?element.removeEnentListener(type, handler, false);
? ? ? ? ? ?} else if (element.datachEvent) {
? ? ? ? ? ? ? ?element.detachEvent('on' + type, handler);
? ? ? ? ? ?} else {
? ? ? ? ? ? ? ?element['on' + type] = null;
? ? ? ? ? ?}
? ? ? ?},
? ? ? ?// 阻止事件 (主要是事件冒泡,因?yàn)镮E不支持事件捕獲)
? ? ? ?stopPropagation : function(ev) {
? ? ? ? ? ?if (ev.stopPropagation) {
? ? ? ? ? ? ? ?ev.stopPropagation();
? ? ? ? ? ?} else {
? ? ? ? ? ? ? ?ev.cancelBubble = true;
? ? ? ? ? ?}
? ? ? ?},
? ? ? ?// 取消事件的默認(rèn)行為
? ? ? ?preventDefault : function(event) {
? ? ? ? ? ?if (event.preventDefault) {
? ? ? ? ? ? ? ?event.preventDefault();
? ? ? ? ? ?} else {
? ? ? ? ? ? ? ?event.returnValue = false;
? ? ? ? ? ?}
? ? ? ?},
? ? ? ?// 獲取事件目標(biāo)
? ? ? ?getTarget : function(event) {
? ? ? ? ? ?return event.target || event.srcElement;
? ? ? ?},
? ? ? ?// 獲取event對(duì)象的引用,取到事件的所有信息,確保隨時(shí)能使用event;
? ? ? ?getEvent : function(e) {
? ? ? ? ? ?var ev = e || window.event;
? ? ? ? ? ?if (!ev) {
? ? ? ? ? ? ? ?var c = this.getEvent.caller;
? ? ? ? ? ? ? ?while (c) {
? ? ? ? ? ? ? ? ? ?ev = c.arguments[0];
? ? ? ? ? ? ? ? ? ?if (ev && Event == ev.constructor) {
? ? ? ? ? ? ? ? ? ? ? ?break;
? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ? ?c = c.caller;
? ? ? ? ? ? ? ?}
? ? ? ? ? ?}
? ? ? ? ? ?return ev;
? ? ? ?}
? ?};

Node.js的適用場(chǎng)景?

高并發(fā)、聊天、實(shí)時(shí)消息推送

介紹js的基本數(shù)據(jù)類(lèi)型。

number,string,boolean,object,undefined

Javascript如何實(shí)現(xiàn)繼承?

通過(guò)原型和構(gòu)造器

["1", "2", "3"].map(parseInt) 答案是多少?

[1, NaN, NaN] 因?yàn)?parseInt 需要兩個(gè)參數(shù) (val, radix) 但 map 傳了 3 個(gè) (element, index, array)

如何創(chuàng)建一個(gè)對(duì)象? (畫(huà)出此對(duì)象的內(nèi)存圖)

?function Person(name, age) {
? ?this.name = name;
? ?this.age = age;
? ?this.sing = function() { alert(this.name) }
?}

談?wù)凾his對(duì)象的理解。

this是js的一個(gè)關(guān)鍵字,隨著函數(shù)使用場(chǎng)合不同,this的值會(huì)發(fā)生變化。

但是有一個(gè)總原則,那就是this指的是調(diào)用函數(shù)的那個(gè)對(duì)象。

this一般情況下:是全局對(duì)象Global。 作為方法調(diào)用,那么this就是指這個(gè)對(duì)象

事件是?IE與火狐的事件機(jī)制有什么區(qū)別? 如何阻止冒泡?

1. 我們?cè)诰W(wǎng)頁(yè)中的某個(gè)操作(有的操作對(duì)應(yīng)多個(gè)事件)。例如:當(dāng)我們點(diǎn)擊一個(gè)按鈕就會(huì)產(chǎn)生一個(gè)事件。是可以被 JavaScript 偵測(cè)到的行為。 ?
2. 事件處理機(jī)制:IE是事件冒泡、火狐是 事件捕獲;
3. ev.stopPropagation();

什么是閉包(closure),為什么要用它?

執(zhí)行say667()后,say667()閉包內(nèi)部變量會(huì)存在,而閉包內(nèi)部函數(shù)的內(nèi)部變量不會(huì)存在.使得Javascript的垃圾回收機(jī)制GC不會(huì)收回say667()所占用的資源,因?yàn)閟ay667()的內(nèi)部函數(shù)的執(zhí)行需要依賴(lài)say667()中的變量。這是對(duì)閉包作用的非常直白的描述.

?function say667() {
? ?// Local variable that ends up within closure
? ?var num = 666;
? ?var sayAlert = function() { alert(num); }
? ?num++;
? ?return sayAlert;
}

var sayAlert = say667();
sayAlert()//執(zhí)行結(jié)果應(yīng)該彈出的667 ?

"use strict";是什么意思 ? 使用它的好處和壞處分別是什么?

如何判斷一個(gè)對(duì)象是否屬于某個(gè)類(lèi)?

?使用instanceof (待完善)

? if(a instanceof Person){
? ? ? alert('yes');
? }

new操作符具體干了什么呢?

? ? 1、創(chuàng)建一個(gè)空對(duì)象,并且 this 變量引用該對(duì)象,同時(shí)還繼承了該函數(shù)的原型。
? ? 2、屬性和方法被加入到 this 引用的對(duì)象中。
? ? 3、新創(chuàng)建的對(duì)象由 this 所引用,并且最后隱式的返回 this 。

var obj ?= {};
obj.__proto__ = Base.prototype;
Base.call(obj);

Javascript中,有一個(gè)函數(shù),執(zhí)行時(shí)對(duì)象查找時(shí),永遠(yuǎn)不會(huì)去查找原型,這個(gè)函數(shù)是?

hasOwnProperty

JSON 的了解?

JSON(JavaScript Object Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式。
它是基于JavaScript的一個(gè)子集。數(shù)據(jù)格式簡(jiǎn)單, 易于讀寫(xiě), 占用帶寬小
{'age':'12', 'name':'back'}

js延遲加載的方式有哪些?

defer和async、動(dòng)態(tài)創(chuàng)建DOM方式(用得最多)、按需異步載入js

ajax 是什么?

同步和異步的區(qū)別?

如何解決跨域問(wèn)題?

jsonp、 iframe、window.name、window.postMessage、服務(wù)器上設(shè)置代理頁(yè)面

模塊化怎么做?

立即執(zhí)行函數(shù),不暴露私有成員

? ?var module1 = (function(){
? ?    var _count = 0;
? ?    var m1 = function(){
? ?      //...
? ?    };
? ?    var m2 = function(){
? ?      //...
? ?    };
? ?    return {
? ?      m1 : m1,
? ?      m2 : m2
? ?    };
? ?  })();

AMD(Modules/Asynchronous-Definition)、CMD(Common Module Definition)規(guī)范區(qū)別?

異步加載的方式有哪些?

?(1) defer,只支持IE

?(2) async:

?(3) 創(chuàng)建script,插入到DOM中,加載完畢后callBack

documen.write和 innerHTML的區(qū)別

document.write只能重繪整個(gè)頁(yè)面

innerHTML可以重繪頁(yè)面的一部分

.call() 和 .apply() 的區(qū)別?

?例子中用 add 來(lái)替換 sub,add.call(sub,3,1) == add(3,1) ,所以運(yùn)行結(jié)果為:alert(4);

?注意:js 中的函數(shù)其實(shí)是對(duì)象,函數(shù)名是對(duì) Function 對(duì)象的引用。

? ?function add(a,b)
? ?{
? ? ? ?alert(a+b);
? ?}

? ?function sub(a,b)
? ?{
? ? ? ?alert(a-b);
? ?}

? ?add.call(sub,3,1); ?

Jquery與jQuery UI 有啥區(qū)別?

*jQuery是一個(gè)js庫(kù),主要提供的功能是選擇器,屬性修改和事件綁定等等。

*jQuery UI則是在jQuery的基礎(chǔ)上,利用jQuery的擴(kuò)展性,設(shè)計(jì)的插件。
提供了一些常用的界面元素,諸如對(duì)話(huà)框、拖動(dòng)行為、改變大小行為等等

JQuery的源碼看過(guò)嗎?能不能簡(jiǎn)單說(shuō)一下它的實(shí)現(xiàn)原理?

jquery 中如何將數(shù)組轉(zhuǎn)化為json字符串,然后再轉(zhuǎn)化回來(lái)?

jQuery中沒(méi)有提供這個(gè)功能,所以你需要先編寫(xiě)兩個(gè)jQuery的擴(kuò)展:

? ?$.fn.stringifyArray = function(array) {
? ? ? ?return JSON.stringify(array)
? ?}

? ?$.fn.parseArray = function(array) {
? ? ? ?return JSON.parse(array)
? ?}

? ?然后調(diào)用:
? ?$("").stringifyArray(array)

針對(duì) jQuery 的優(yōu)化方法?

*基于Class的選擇性的性能相對(duì)于Id選擇器開(kāi)銷(xiāo)很大,因?yàn)樾璞闅v所有DOM元素。

*頻繁操作的DOM,先緩存起來(lái)再操作。用Jquery的鏈?zhǔn)秸{(diào)用更好。 ?
比如:var str=$("a").attr("href");

*for (var i = size; i < arr.length; i++) {}
for 循環(huán)每一次循環(huán)都查找了數(shù)組 (arr) 的.length 屬性,在開(kāi)始循環(huán)的時(shí)候設(shè)置一個(gè)變量來(lái)存儲(chǔ)這個(gè)數(shù)字,可以讓循環(huán)跑得更快:
for (var i = size, length = arr.length; i < length; i++) {}

JavaScript中的作用域與變量聲明提升?

如何編寫(xiě)高性能的Javascript?

那些操作會(huì)造成內(nèi)存泄漏?

內(nèi)存泄漏指任何對(duì)象在您不再擁有或需要它之后仍然存在。
垃圾回收器定期掃描對(duì)象,并計(jì)算引用了每個(gè)對(duì)象的其他對(duì)象的數(shù)量。如果一個(gè)對(duì)象的引用數(shù)量為 0(沒(méi)有其他對(duì)象引用過(guò)該對(duì)象),或?qū)υ搶?duì)象的惟一引用是循環(huán)的,那么該對(duì)象的內(nèi)存即可回收。

setTimeout 的第一個(gè)參數(shù)使用字符串而非函數(shù)的話(huà),會(huì)引發(fā)內(nèi)存泄漏。
閉包、控制臺(tái)日志、循環(huán)(在兩個(gè)對(duì)象彼此引用且彼此保留時(shí),就會(huì)產(chǎn)生一個(gè)循環(huán))

JQuery一個(gè)對(duì)象可以同時(shí)綁定多個(gè)事件,這是如何實(shí)現(xiàn)的?


天蓬老師
天蓬老師

歡迎選擇我的課程,讓我們一起見(jiàn)證您的進(jìn)步~~

全部回復(fù)(0)
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板