
前言 如今,對(duì)于現(xiàn)今前端熱門的三大框架Vue,Angular,React,對(duì)于web開發(fā)者來說,早已不是什么陌生的詞 盡管三者實(shí)現(xiàn)業(yè)務(wù)最終的目的都能達(dá)成一致,但是各有特色,其...
專門來感謝波老師,計(jì)算機(jī)這門科學(xué)正是有波老師這樣的人無私的把自己的東西貢獻(xiàn)出來才有這樣繁榮的發(fā)展雁社,記得看到一句話置济,如果每個(gè)程序員都寫博客,中國(guó)的計(jì)算機(jī)行業(yè)到達(dá)頂端只是時(shí)間的問題谆扎。從波老師的文章中學(xué)到了太多東西挂捅,感謝
簡(jiǎn)單來說堂湖,假設(shè)函數(shù)A在函數(shù)B的內(nèi)部進(jìn)行定義了闲先,并且當(dāng)函數(shù)A在執(zhí)行時(shí)状土,訪問了函數(shù)B內(nèi)部的變量對(duì)象,那么B就是一個(gè)閉包伺糠。
這個(gè)解釋不準(zhǔn)確蒙谓。簡(jiǎn)而言之閉包就是運(yùn)行時(shí)能訪問另外一個(gè)函數(shù)內(nèi)的變量的函數(shù)。例如:function A(){ var a="aa"; return function B(){alert(a)}}; funcA = A()训桶。A和B都不算是閉包累驮,A和B組合成構(gòu)造了閉包環(huán)境,真正的閉包是funcA舵揭。即A函數(shù)包變量a封閉起來了谤专,外面無法訪問,但是提供了一個(gè)包B函數(shù)可以訪問琉朽。A和B一閉一包毒租。上面那句話可以解釋為: 閉包就是運(yùn)行時(shí)(funcA())能訪問另外一個(gè)函數(shù)(A)內(nèi)的變量(a)的函數(shù)(funcA)。
人世間 評(píng)論自前端基礎(chǔ)進(jìn)階(五):閉包
另外幾種方式:
1.利用setTimeout第三個(gè)參數(shù)
for (var i=1; i<=5; i++) {
setTimeout( function timer(i) {
console.log(i);
}, i*1000,i );
}
2.利用bind方法
for (var i=1; i<=5; i++) {
setTimeout( function timer(i) {
console.log(i);
}.bind(null,i), i*1000 );
}
3.利用let
for (let i=1; i<=5; i++) {
setTimeout( function timer() {
console.log(i);
}, i*1000 );
}
變量對(duì)象箱叁,在新版本中墅垮,準(zhǔn)確的說法應(yīng)該是環(huán)境記錄對(duì)象,而環(huán)境記錄對(duì)象耕漱,又區(qū)分詞法環(huán)境對(duì)象與變量環(huán)境對(duì)象算色,詞法環(huán)境對(duì)象用于解析當(dāng)前上下文中,由 const 聲明的標(biāo)識(shí)符引用螟够,變量...
在javascript里,事件委托是很重要的一個(gè)東西妓笙,事件委托依靠的就是事件冒泡和捕獲的機(jī)制若河,我先來解釋一下事件冒泡和事件捕獲: 事件冒泡會(huì)從當(dāng)前觸發(fā)的事件目標(biāo)一級(jí)一級(jí)往上傳...
大大,你好篷就,看了這篇文章收獲頗大射亏,真的很感激。不過還有點(diǎn)小疑惑,希望大大能幫忙講解下鸦泳。就是關(guān)與循環(huán)結(jié)束節(jié)點(diǎn)的银锻,文章栗子里第二輪循環(huán)的結(jié)束節(jié)點(diǎn)為什么是在setImmediate呢永品?不是應(yīng)該在setTimeout微任務(wù)執(zhí)行完結(jié)束第二次循環(huán)嗎做鹰?然后開啟第三輪循環(huán)跑setImmediate的嗎?這個(gè)如何去理解呢鼎姐?請(qǐng)大大或者各位看官有知道的幫忙指點(diǎn)下钾麸,謝謝????
//執(zhí)行第一輪宏任務(wù)隊(duì)列(macro)
golb1
glob1_promise
glob2_promise
//執(zhí)行第一輪微任務(wù)隊(duì)列(micro)
glob1_nextTick
glob2_nextTick
glob1_then
glob2_then
第一輪事件循環(huán)結(jié)束
//執(zhí)行第二輪宏任務(wù)中的setTimeout隊(duì)列(macro)
timeout1
timeout1_promise
timeout2
timeout2_promise
//執(zhí)行第二輪宏任務(wù)setTimeout產(chǎn)生的微任務(wù)隊(duì)列(micro)
timeout1_nextTick
timeout2_nextTick
timeout1_then
timeout2_then
第二輪事件循環(huán)結(jié)束
//執(zhí)行第二輪宏任務(wù)中setImmediate隊(duì)列(macro)
immediate1
immediate1_promise
immediate2
immediate2_promise
//執(zhí)行第二輪宏任務(wù)setImmediate產(chǎn)生的微任務(wù)隊(duì)列(micro)
immediate1_nextTick
immediate2_nextTick
immediate1_then
immediate2_then
每次鼠標(biāo)mouseDown都要重新調(diào)用getTargetPos 函數(shù)饭尝,如果在第一次拖拽之后把最后的值保存起來作為新的初始值 ,下一次拖拽就不需要重新調(diào)用方法献宫,直接從變量中拿到钥平,這樣性能會(huì)不會(huì)更好?
我說一下姊途,我的理解吧涉瘾,結(jié)合《JavaScript高級(jí)程序設(shè)計(jì)》和《JavaScript權(quán)威指南》對(duì)閉包的解釋,我更覺得權(quán)威指南解釋更為正確一些捷兰,閉包不應(yīng)該說是指某個(gè)函數(shù)吧立叛,波神你根據(jù)chrome的顯示,說是外層函數(shù)贡茅,而高級(jí)程序設(shè)計(jì)恰好相反秘蛇,說閉包是內(nèi)部函數(shù)。閉包更準(zhǔn)確的說是一項(xiàng)技術(shù)或者一個(gè)特性顶考,函數(shù)作用域中的變量在函數(shù)執(zhí)行完成之后就會(huì)被垃圾回收赁还,一般情況下訪問一個(gè)函數(shù)作用域中的變量,正常是無法訪問的驹沿,只能通過特殊的技術(shù)或者特性來實(shí)現(xiàn)艘策,就是在函數(shù)作用域中創(chuàng)建內(nèi)部函數(shù)來實(shí)現(xiàn),這樣就不會(huì)使得函數(shù)執(zhí)行完成變量被回收甚负,這種技術(shù)或者特性應(yīng)該被稱為“閉包”柬焕,像是《JavaScript權(quán)威指南》打的比方,像是把變量包裹了起來梭域,形象的稱為“閉包”斑举。我覺得應(yīng)該是這樣,而不是指某個(gè)函數(shù)是閉包病涨。發(fā)表一下個(gè)人觀點(diǎn)富玷,有可能有錯(cuò)誤,希望能拋磚引玉,引來大家更加深入的理解赎懦。
f1482cbfb158 評(píng)論自前端基礎(chǔ)進(jìn)階(五):閉包
引言 Javascript是前端面試的重點(diǎn),本文重點(diǎn)梳理下 Javascript 中的忱剑考知識(shí)點(diǎn)黎茎,然后就一些容易出現(xiàn)的題目進(jìn)行解析。限于文章的篇幅当悔,無法將知識(shí)點(diǎn)講解的面面俱到...
Javascript是前端面試的重點(diǎn)傅瞻,本文重點(diǎn)梳理下Javascript中的常考知識(shí)點(diǎn)盲憎,然后就一些容易出現(xiàn)的題目進(jìn)行解析嗅骄。限于文章的篇幅,無法將知識(shí)點(diǎn)講解的面面俱到饼疙,因此只羅...