国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > JavaScript > 正文

javascript,jquery閉包概念分析

2019-11-21 00:25:26
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
但javascript我是經(jīng)常要用,所以是要懂這里面的概念。
其實(shí)javascript里的閉包概念很簡(jiǎn)單,就是函數(shù)用到外部變量,不需要傳參就可以獲取。
舉個(gè)例子:
復(fù)制代碼 代碼如下:

<script>
var sMessage = "Hello world";
function sayHello(){
alert(sMessage);
}
sayHello();
addNumber(1,2);

var iBaseNum = 10;
function addNumber(iNum1, iNum2) {
function doAddition() {
alert(iNum1 + iNum2 + iBaseNum);
}
return doAddition();
}
function a(){
var i=0;
function b(){
alert(++i);
}
return b;
}
var c = a();
c();
c();

</script>

第一個(gè)函數(shù)sayHello沒(méi)有傳參數(shù),直接利用了sMessage變量,這個(gè)就叫做閉包。
第二個(gè)函數(shù)復(fù)雜點(diǎn),里面有個(gè)doAddition也是閉包函數(shù),他不需要參數(shù),直接在執(zhí)行環(huán)境中獲取iNum1,iNum2,還有外部變量 iBaseNum。
第三個(gè)函數(shù) 是能保護(hù) i變量的訪問(wèn),并且一直保存i在內(nèi)存中,可以一直增加。(閉包的一個(gè)經(jīng)典用法)
jquery中閉包也差不多,先給個(gè)例子

你也許會(huì)問(wèn)
復(fù)制代碼 代碼如下:

(function($){
$("div p").click(function(){alert("cssrain!")});
})(jQuery); //一個(gè)閉包

這是什么寫法啊?
別急,我也是請(qǐng)教了upc ,才稍微懂了點(diǎn)。
這里面的$只是形參,但jquery是全局變量,所以不需要調(diào)用該函數(shù)就會(huì)自動(dòng)執(zhí)行,或者分兩步
就是轉(zhuǎn)化成正常的函數(shù),先寫函數(shù),后調(diào)用。
如下所示
其實(shí):
復(fù)制代碼 代碼如下:

(function($){
$("div p").click(。。。);
})(jQuery);

就是等于
復(fù)制代碼 代碼如下:

function tempFunction($){ //創(chuàng)建一個(gè)以$為形參的函數(shù)
$("div p").click(....);
}
TempFunction(jQuery); //傳入實(shí)參jQuery執(zhí)行函數(shù).

干脆直接這么寫 ,算了

復(fù)制代碼 代碼如下:

(function(cssrain){
cssrain("div p").click(.... );
})(jQuery); //一個(gè)閉包


閉包的基本寫法:
(function(){do someting})();
//這個(gè)你就理解為定義一個(gè)匿名函數(shù)并立即執(zhí)行
帶參數(shù)的話就這樣:
(function(形參){do someting})(實(shí)參);
另外
(function(){var upc="i am upc"})();
alert(upc);
會(huì)提示undefined。
因?yàn)殚]包后,里面的變量就相當(dāng)于局部了。
閉包的好處:
不增加額外的全局變量,
執(zhí)行過(guò)程中所有變量都是在匿名函數(shù)內(nèi)部。
上面的例子不是很好,跟javascript的閉包有點(diǎn)混淆,但這確實(shí)也是jquery中的一種閉包。只不過(guò)經(jīng)過(guò)jquery的加工罷了。
如過(guò)有什么不對(duì),大家互相討論,我也是初學(xué)者,還有很多不懂得地方。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 廉江市| 石狮市| 蓬溪县| 板桥市| 镇宁| 双柏县| 广水市| 彭山县| 凌海市| 玉田县| 太康县| 木兰县| 邹城市| 睢宁县| 泰来县| 革吉县| 霍城县| 鄂托克前旗| 天等县| 凉山| 呼伦贝尔市| 密山市| 孝义市| 抚远县| 永靖县| 井陉县| 乾安县| 布拖县| 同心县| 南汇区| 思茅市| 四子王旗| 界首市| 南京市| 沐川县| 铁岭市| 永胜县| 文昌市| 阳曲县| 天柱县| 封开县|