js框架中,解決污染的方式(立即閉包函數)


<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script type="text/javascript" src='jquery-1.11.2.min.js'></script>

</head>
<body>

</body>
<script>

//定義一個含有閉包特性的匿名函數
(function(){
var name = 'sun';
var sex = '男';
function get1(){
return name +':'+sex;
}
function get2(){
return name +':'+sex;
}
//外界無法訪問閉包中的函數
//方法:通過如下方式訪問,相當於給全局對象擴充一個屬性
window.get2 = get2;
})();


//get2成爲全局變量
console.log(get2());

</script>

</html>

這樣存在一個問題,如果需要訪問裏面的多個變量或者函數,那麼我們需要給window定義多個全局變量,污染問題還沒減少,方法:我們可以定義一個json,再把json賦給window的一個全局變量,來保存我們所有需要暴露的值

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script type="text/javascript" src='jquery-1.11.2.min.js'></script>

</head>
<body>

</body>
<script>
//定義一個含有閉包特性的匿名函數


(function(){
var name = 'sun';
var sex = '男';
function get1(){
return name +':'+sex;
}
function get2(){
return name +':'+sex;
}
var json = {
name:name,
sex:sex,
get2:get2,
on:function(){
console.log("事件框架-on");
}
};

window.abc = json;
})();


console.log(abc.name);
console.log(abc.get2());
abc.on();
</script>
</html>

同:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script type="text/javascript" src='jquery-1.11.2.min.js'></script>

</head>
<body>

</body>
<script>
//定義一個含有閉包特性的匿名函數


(function(w){
var name = 'sun';
var sex = '男';
function get1(){
return name +':'+sex;
}
function get2(){
return name +':'+sex;
}
var json = {
name:name,
sex:sex,
get2:get2,
on:function(){
console.log("事件框架-on");
}
};

w.abc =json;
})(window);

console.log(abc.get2());
</script>
</html>

return方式,第一必須定義一個變量去接收這個立即函數,第二必須在內部定義一個return,一般return爲json對象,在json裏放置任何想要暴露的屬性,方法,

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script type="text/javascript" src='jquery-1.11.2.min.js'></script>

</head>
<body>

</body>
<script>
var my = (function(){
var name = 'sun';
var sex = 'nv';
return{
get:function(){
return name+':'+sex;
}


}


})();


console.log(my.get());
</script>
</html>


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章