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);
}
});