search
尋找貓咪~QQ 地點 桃園市桃園區 Taoyuan , Taoyuan

前端面試題集錦6---js小點滴

1.如何防止js的變數污染:我們知道,在文件中直接定義的變數跟函數(不嵌套在任何域底下的)都是屬於全局的,也就是都在當前頁面的window變數底下。比如最開始我們都會這麼寫:

function main{

}

var i;

最普通的像這樣,都是全局的。我們都可以這樣訪問它們,

①直接訪問i,main等;

②使用window["i"], window["main"]等;

③使用window.i,window.main等。、

這樣在代碼邏輯過長,項目較大,多人協作時,定義過多的全局變數很有可能造成全局變數衝突,也就是全局變數污染問題。下面是兩種方式:

對於web前端的學習有不懂的,或者不知道學習路線,不知道學習方法,不知道該如何紮實能找到工作的朋友,我還是要推薦下我自己建的前端學習群:477149581,首先你要是前端黨,其次不管你是小白還是大牛,我都挺歡迎,小白嘛,主動點多問問題也就學好了,群里每天分享乾貨,包括我自己最近花了一星期整理的一份適合2017年自學的最新web前端資料,送給大家,歡迎初學和進階中的小夥伴。

①定義全局變數命名空間:

var animal={};

animal.dog={ name:"xiaohei",

age:"5",

weight:"13kg"

};

animal.cat={

name:"xiaobai",

age:"4",

weight:"8kg"

};

②利用匿名函數將腳本包裹起來:

(function{

var animal={};

var name="aa";

animal.dog=function{

return name;

};

window.animals=animal;

});

2.命名空間(直接抄寫網上):

實現命名空間機制:

使用方式:

3.原生ajax請求寫法:

現在我們基本是用jQuery封裝的ajax,但是原生的呢。下面就是摘抄的實現方式。

首先我們需要創建XMLHttpRequest對象,但是,大家知道IE和其它支持是不一樣的。所以,先做個判斷。

var xmlHttp;

function createxmlHttpRequest {

if (window.ActiveXObject) {

xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); //IE

} else if (window.XMLHttpRequest) {

xmlHttp=new XMLHttpRequest; //非IE

}

這樣就創建好了一個XMLHttpRequest對象。

這就是個get請求:

function doGet(url){

// 注意在傳參數值的時候最好使用encodeURI處理一下,以防出現亂碼

createxmlHttpRequest;

xmlHttp.open("GET",url);

xmlHttp.send(null);

xmlHttp.onreadystatechange = function {

if ((xmlHttp.readyState == 4) && (xmlHttp.status == 200)) {

alert('success');

} else {

alert('fail');

}

}

}

這就是個POST請求:function doPost(url,data){

// 注意在傳參數值的時候最好使用encodeURI處理一下,以防出現亂碼

createxmlHttpRequest;

xmlHttp.open("POST",url);

xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

xmlHttp.send(data);

xmlHttp.onreadystatechange = function {

if ((xmlHttp.readyState == 4) && (xmlHttp.status == 200)) {

alert('success');

} else {

alert('fail');

}

}

}

下面是一個仿照jQuery的ajax的請求封裝:

var createAjax = function{

var xhr=null;

try {

xhr=new ActiveXObject("microsoft.xmlhttp"); // IE系列瀏覽器

} catch(e1) {

try{

xhr=new XMLHttpRequest; // 非IE瀏覽器

} catch(e2) {

window.alert("您的瀏覽器不支持ajax,請更換!");

}

}

return xhr;

};

var ajax=function(conf){

var type=conf.type; // type參數,可選

var url=conf.url; // url參數,必填

var data=conf.data; // data參數可選,只有在post請求時需要

var dataType=conf.dataType; // datatype參數可選

var success=conf.success; // 回調函數可選

if (type == null) {

type="get"; // type參數可選,默認為get

}

if (dataType == null){

dataType="text"; // dataType參數可選,默認為text

}

var xhr = createAjax;

xhr.open(type,url,true);

if (type=="GET" || type=="get") {

xhr.send(null);

} else if (type=="POST" || type=="post") {

xhr.setRequestHeader("content-type","application/x-www-form-urlencoded");

xhr.send(data);

}

xhr.onreadystatechange=function{

if ((xhr.readyState == 4) && (xhr.status == 200)) {

if (dataType=="text" || dataType=="TEXT"){

if (success != null){

success(xhr.responseText); // 普通文本

}

} else if(dataType=="xml" || dataType=="XML"){

if (success != null){

success(xhr.responseXML); // 接收xml文檔

}

} else if (dataType=="json" || dataType=="JSON"){

if (success != null) {

success(eval("("+xhr.responseText+")")); //將json字元串轉換為js對象

}

}

}

};

};

使用方式如下:

ajax({

type:"post",//post或者get,非必須

url:"test.jsp",//必須的

data:"name=dipoo&info=good",//非必須

dataType:"json",//text/xml/json,非必須

success:function(data){//回調函數,非必須

alert(data.name);

}

});



熱門推薦

本文由 yidianzixun 提供 原文連結

寵物協尋 相信 終究能找到回家的路
寫了7763篇文章,獲得2次喜歡
留言回覆
回覆
精彩推薦