js-函數(shù)(閉包)

1:閉包:一個函數(shù)外加上該函數(shù)所創(chuàng)建時所建立的作用域。閉包的名字來源于閉包“關(guān)閉”一個函數(shù)中自由變量的訪問的權(quán)利。我們所說的變量是自由的,是指該變量定義在函數(shù)外部的,而非函數(shù)內(nèi)部。這個不懂。。。。如果一個函數(shù)訪問了它的外部變量,那么它就是一個閉包。
2:function create(start){return function(step){start+=step;return start;}};var inc=create(5)(1);
3:閉包是一個代碼執(zhí)行完成后離開作用域環(huán)境依然存在的例子。這個懂。。
4:for(var i=0;i<5;i++){ (function(){return function(){return i;}result.push(i)}())};不成功的閉包。
5:var result=[];
for(var i=0;i<5;i++){
(function(){
var func=function(){
return i;
};
result.push(func)
}());
}二改,還是出來的函數(shù)。返回的數(shù)組
6:var result=[];
for(var i=0;i<5;i++){
(function(){
var pos=i;
var func=function(){
return pos;
};
result.push(func)
}());
}三改,
7:函數(shù)變量可以保存在函數(shù)的作用域內(nèi),因此看起來就好像是函數(shù)將變量包起來了。包含變量的函數(shù)就是閉包。---有權(quán)訪問另一個函數(shù)作用域內(nèi)變量的函數(shù)就是閉包。
8:函數(shù)聲明和函數(shù)表達式。給一個函數(shù)加上括號就把他從一個聲明變成了表達式。可以直接調(diào)用。
9:閉包的三個條件:訪問所在的作用域,函數(shù)嵌套,在所在作用域外被調(diào)用。
10:初級階段:function f(value){var b=value;return function(){return b;}};f('libateer')();
11:高級一點:var n;function f(){var b=1123;n=function(){return b;}};n();
12: 在高級一點:function show(first,last){var name="hello";function make(){return name+first+""+last}return make()};show("lilei","wanggua");
13:在高級一點:(function (first,last){var name="hello";function make(){return name+first+""+last}return make()})(str,str);
14:for(var i=0;i<7;i++){(function (first,last){var name="hello";function make(){return name+first+""+last}return make()})(i-100,i+100);}和上面那個差不多了吧。。
15:在在高級一點:function hello(){var name=999;return {get:function(){return name;},set:function(id){name=id;}}}var f1=hello();f1.set('lailai');f1.get();
16:找到那個怎么搞的了?function f(){var a=[];for(var i=0;i<4;i++){a[i]=function(){return i;}}return a;};var a=f();和原來出的一樣現(xiàn)在f()函數(shù)出來的還是函數(shù),所以要這樣a1;我要取到他的函數(shù),在把這個函數(shù)表達出來。但是現(xiàn)在他的值還是4.是最后的,所以要在那里吧那個替換了。var pos=i;來個這個東西。
17:閉包的經(jīng)常用法:var db = (function() {
// 創(chuàng)建一個隱藏的object, 這個object持有一些數(shù)據(jù)
// 從外部是不能訪問這個object的
var data = {};
// 創(chuàng)建一個函數(shù), 這個函數(shù)提供一些訪問data的數(shù)據(jù)的方法
return function(key, val) {
if (val === undefined) { return data[key] } // get
else { return data[key] = val } // set
}
// 我們可以調(diào)用這個匿名方法
// 返回這個內(nèi)部函數(shù),它是一個閉包
})();

db('x'); // 返回 undefined
db('x', 1); // 設(shè)置data['x']為1
db('x'); // 返回 1
// 我們不可能訪問data這個object本身
// 但是我們可以設(shè)置它的成員
17:函數(shù)的參數(shù)和變量不會被垃圾回收機制所回收,因為他是一只被另一個函數(shù)所引用的。
18:閉包的好處:希望一個變量長期的駐扎到里面,避免全局變量的污染。
19:回到初級:function aaa(){var a=1;return function(){a++;console.log(a)}};var b=aaa()不論是這種形式,還是下面的function aaa(){var a=1;var a=function(){a++;console.log(a)};return a;};一開始都要這樣:先把原函數(shù)取出來。
20:var a=(function(){var a=1;return function(){a++;console.log(a)}})();有那么點意思了,a();執(zhí)行時變成了這樣。、
21:用法:模塊化代碼,私有成員方法的存在。
22:var a=(function(){
var a=1;
function a1(){
a++;
console.log(a);
}
function a2(){
a+=3;
console.log(a+100);
}
return {
a1:a1,
a2:a2
}
})()我讓他私有了。。a.a1();
23:又來了:window.onload=function(){
var Oli=document.getElementsByTagName('li');
for(var i=0;i<Oli.length;i++){
var pos=i;
Oli[i].onclick=(function(){
console.log(pos);
})(pos);
}--改造以后for(var i=0;i<Oli.length;i++){

            Oli[i].onclick=(function(i){
                return function(){console.log(i)}
            })(i);
    }可以不給上面括號的加參數(shù),但是不能不給下面的傳參數(shù)。但是這個是自執(zhí)行函數(shù),不點擊都會出結(jié)果。

24:(function(i){
Oli[i].onclick=function(){
console.log(i);
}
})(i)為什么變成這個就是兩個都要加I而且他還不會是自執(zhí)行的函數(shù)。
15:閉包注意:IE下的內(nèi)存泄漏:
16:函數(shù)表達式的形式:var a=function(){console.log(a)};(function(){console.log(a)})() 函數(shù)表達式可以直接加一個()執(zhí)行。
25:函數(shù)聲明會被欲解析出來,如果我們想要在一些語句中實現(xiàn)不用的函數(shù),一定要用函數(shù)表達式。匿名函數(shù)表達式和具名函數(shù)表達式。
26:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,001評論 6 537
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,786評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,986評論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,204評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 71,964評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,354評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,410評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,554評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,106評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,918評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,093評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,648評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,342評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,755評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,009評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,839評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 48,107評論 2 375

推薦閱讀更多精彩內(nèi)容

  • 工廠模式類似于現(xiàn)實生活中的工廠可以產(chǎn)生大量相似的商品,去做同樣的事情,實現(xiàn)同樣的效果;這時候需要使用工廠模式。簡單...
    舟漁行舟閱讀 7,799評論 2 17
  • 單例模式 適用場景:可能會在場景中使用到對象,但只有一個實例,加載時并不主動創(chuàng)建,需要時才創(chuàng)建 最常見的單例模式,...
    Obeing閱讀 2,088評論 1 10
  • 三、閉包和高階函數(shù) 3.1 閉包 3.1.1 變量的作用域 所謂變量的作用域,就是變量的有效范圍。通過作用域的劃分...
    梁同學(xué)de自言自語閱讀 1,480評論 0 6
  • ● 閉包基礎(chǔ) ● 閉包作用 ● 閉包經(jīng)典例子 ● 閉包應(yīng)用 ● 閉包缺點 ● 參考資料 1、閉包基礎(chǔ) 作用域和作...
    lzyuan閱讀 956評論 0 0
  • 什么是閉包? 有什么作用閉包:函數(shù)對象可以通過作用域鏈相互關(guān)聯(lián),函數(shù)體內(nèi)部的變量可以保存在函數(shù)的作用域內(nèi)。 上述代...
    coolheadedY閱讀 735評論 0 0