閉包題目講解2

封裝Car對象

var car=(function(){
  var speed=0;
  function set(s){
    speed = s
  }
  function get(){
    return speed
  }
  function speedUp(){
    speed++
  }
  function speedDown(){
    speed--
  }
  return {
    set:set,
    get : get,
    speedUp:speedUp,
    speedDown:speedDown
    }
})()
car.set(30)       //是對象的用法,返回的應(yīng)該是對象懊纳,對象的返回值需要用函數(shù)
car.get()
car.speedUp()
car.speedDown()
car.get()

效果如圖:

不能直接對speed進(jìn)行操作,封裝在一個包里亡容,用函數(shù)去操作這個變量嗤疯,這個變量就是局部變量了,car是全局變量闺兢,得不到釋放茂缚,所以返回的對象得不到釋放,所以對象應(yīng)用的方法得不到釋放,方法得不到釋放脚囊,speed得不到釋放龟糕,生成閉包。

如何連續(xù)輸出0悔耘,1讲岁,2,3衬以,4

原代碼:
for(var i=0;i<5;i++){
  setTimeout(function(){
    console.log('delayer:'+i)
  },0)
}
//"delayer:5"
"delayer:5"
"delayer:5"
"delayer:5"
"delayer:5"

setTimeout會把當(dāng)前執(zhí)行的加到任務(wù)隊列里缓艳,for循環(huán)相當(dāng)于設(shè)置了5個定時器,這時候i=5看峻,再去執(zhí)行郎任。再說一次,for循環(huán)對于閉包备籽,干擾更大,所以分井,實質(zhì)上的影響不僅僅在于循環(huán)幾次车猬,最后要決定執(zhí)行幾次,還有這個i的值的影響尺锚。前面的閉包珠闰,盡量讓i的賦值在函數(shù)內(nèi)部的作用域,所以造了個閉包瘫辩,并立即執(zhí)行伏嗜,i不需要引用for循環(huán)得到的i值。
如何利用呢伐厌?

for(var i=0;i<5;i++){
  (function(j){
    setTimeout(function(){
    console.log('delayer:'+j)
  },0)
 })(i)
}
//"delayer:0"     又是立即執(zhí)行的函數(shù)承绸,這次i的賦值遵從for循環(huán)的取值,這是什么情況呢挣轨?
//就是循環(huán)時先把函數(shù)的變量i賦值军熏,但是延時執(zhí)行,for循環(huán)依然正常循環(huán)卷扮,雖然函數(shù)執(zhí)行時荡澎,i已經(jīng)是5了。
"delayer:1"
"delayer:2"
"delayer:3"
"delayer:4"


for(var i=0;i<5;i++){
  (function(j){
    
      setTimeout(function(){
    console.log('delayer:'+j)
  },10000 - 1000*j)
 })(i)
}
//"delayer:4"
"delayer:3"
"delayer:2"
"delayer:1"
"delayer:0"
這里只是把定時器的順序換了下晤锹,數(shù)字越大摩幔,延時越短,越靠前執(zhí)行嘛鞭铆。
for(var i=0;i<5;i++){
 setTimeout(function(j){
   return function(){
     console.log('delayer:'+j)
      }
  }(i),0)
} 
//"delayer:0"
"delayer:1"
"delayer:2"
"delayer:3"
"delayer:4"
定時器里的函數(shù)會立刻執(zhí)行或衡,跟上面的那個延時的不一樣,上面的函數(shù)里有定時器啊,這個輸出是立刻的薇宠。
執(zhí)行過程中傳遞i偷办,然后里面return的那個結(jié)果就是一個函數(shù),setTimeout就能用這個函數(shù)澄港,用的過程中椒涯,用到了j,中間加個臨時變量存進(jìn)去了,用到的時候回梧,就從上一級去找废岂,每當(dāng)i賦值了,j=arguments[0]也擁有了值狱意。
var makeCounter=function(){
  var count = 0
  return function(){
    return count++
  }
}
var counter = makeCounter()
var counter2=makeCounter()
console.log(counter())     //0
console.log(counter())//1
console.log(counter2())//0
console.log(counter2())//1
這里的意思湖苞,聲明不一樣的兩個變量同時指向一個函數(shù),通過作用后详囤,兩者得到了兩個獨立的作用域?qū)ο蟛乒牵ハ嗖挥绊懙摹:瘮?shù)只是一種操作方法藏姐。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末隆箩,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子羔杨,更是在濱河造成了極大的恐慌捌臊,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件兜材,死亡現(xiàn)場離奇詭異理澎,居然都是意外死亡,警方通過查閱死者的電腦和手機曙寡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進(jìn)店門糠爬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人举庶,你說我怎么就攤上這事秩铆。” “怎么了灯变?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵殴玛,是天一觀的道長。 經(jīng)常有香客問我添祸,道長滚粟,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任刃泌,我火速辦了婚禮凡壤,結(jié)果婚禮上署尤,老公的妹妹穿的比我還像新娘。我一直安慰自己亚侠,他們只是感情好曹体,可當(dāng)我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著硝烂,像睡著了一般箕别。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上滞谢,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天串稀,我揣著相機與錄音,去河邊找鬼狮杨。 笑死母截,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的橄教。 我是一名探鬼主播清寇,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼护蝶!你這毒婦竟也來了华烟?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤滓走,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后帽馋,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體搅方,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年绽族,在試婚紗的時候發(fā)現(xiàn)自己被綠了姨涡。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡吧慢,死狀恐怖涛漂,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情检诗,我是刑警寧澤匈仗,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站逢慌,受9級特大地震影響悠轩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜攻泼,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一火架、第九天 我趴在偏房一處隱蔽的房頂上張望鉴象。 院中可真熱鬧,春花似錦何鸡、人聲如沸纺弊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽淆游。三九已至,卻和暖如春洞翩,著一層夾襖步出監(jiān)牢的瞬間稽犁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工骚亿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留已亥,地道東北人。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓来屠,卻偏偏與公主長得像虑椎,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子俱笛,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,614評論 2 353

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

  • 1.什么是閉包? 有什么作用捆姜? 閉包是指有權(quán)訪問其他函數(shù)作用域中的變量的函數(shù)。 詳細(xì)解釋:就是在一個函數(shù)中迎膜,父函數(shù)...
    Sheldon_Yee閱讀 1,139評論 2 2
  • 閉包 定義「一個函數(shù)」+「訪問到的外部變量」= 閉包 作用創(chuàng)建內(nèi)部變量泥技,既不能被外部隨意修改,又可以通過指定的函數(shù)...
    jrg_memo閱讀 497評論 0 0
  • 什么是閉包? 有什么作用閉包:函數(shù)對象可以通過作用域鏈相互關(guān)聯(lián),函數(shù)體內(nèi)部的變量可以保存在函數(shù)的作用域內(nèi)榕订。 上述代...
    coolheadedY閱讀 727評論 0 0
  • 清秋店茶,藏一頁梨花帶雨的幽幽,放遠(yuǎn)城南舊事的一波三折劫恒,臨水而坐贩幻,輕握心事里的籬笆墻,緩緩前行两嘴。忘卻的舊書上丛楚,書寫靜寂...
    kenvin吳海浪閱讀 378評論 0 3
  • 莫名的情愫啊 請問,誰能將它帶走呢憔辫? 只有把歲月化成一首歌鸯檬, 留在山河。螺垢。喧务。赖歌。
    _夏末_閱讀 364評論 3 3