
前言 如今,對于現今前端熱門的三大框架Vue,Angular,React,對于web開發(fā)者來說,早已不是什么陌生的詞 盡管三者實現業(yè)務最終的目的都能達成一致,但是各有特色,其...
專門來感謝波老師程梦,計算機這門科學正是有波老師這樣的人無私的把自己的東西貢獻出來才有這樣繁榮的發(fā)展罩息,記得看到一句話荞胡,如果每個程序員都寫博客,中國的計算機行業(yè)到達頂端只是時間的問題娱局。從波老師的文章中學到了太多東西彰亥,感謝
簡單來說衰齐,假設函數A在函數B的內部進行定義了任斋,并且當函數A在執(zhí)行時,訪問了函數B內部的變量對象娇斩,那么B就是一個閉包仁卷。
這個解釋不準確穴翩。簡而言之閉包就是運行時能訪問另外一個函數內的變量的函數犬第。例如:function A(){ var a="aa"; return function B(){alert(a)}}; funcA = A()。A和B都不算是閉包芒帕,A和B組合成構造了閉包環(huán)境歉嗓,真正的閉包是funcA。即A函數包變量a封閉起來了背蟆,外面無法訪問鉴分,但是提供了一個包B函數可以訪問哮幢。A和B一閉一包。上面那句話可以解釋為: 閉包就是運行時(funcA())能訪問另外一個函數(A)內的變量(a)的函數(funcA)志珍。
人世間 評論自前端基礎進階(五):閉包
另外幾種方式:
1.利用setTimeout第三個參數
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 );
}
變量對象橙垢,在新版本中,準確的說法應該是環(huán)境記錄對象伦糯,而環(huán)境記錄對象柜某,又區(qū)分詞法環(huán)境對象與變量環(huán)境對象,詞法環(huán)境對象用于解析當前上下文中敛纲,由 const 聲明的標識符引用喂击,變量...
在javascript里淤翔,事件委托是很重要的一個東西翰绊,事件委托依靠的就是事件冒泡和捕獲的機制,我先來解釋一下事件冒泡和事件捕獲: 事件冒泡會從當前觸發(fā)的事件目標一級一級往上傳...
大大厦坛,你好五垮,看了這篇文章收獲頗大,真的很感激杜秸。不過還有點小疑惑放仗,希望大大能幫忙講解下。就是關與循環(huán)結束節(jié)點的撬碟,文章栗子里第二輪循環(huán)的結束節(jié)點為什么是在setImmediate呢诞挨?不是應該在setTimeout微任務執(zhí)行完結束第二次循環(huán)嗎?然后開啟第三輪循環(huán)跑setImmediate的嗎呢蛤?這個如何去理解呢惶傻?請大大或者各位看官有知道的幫忙指點下,謝謝????
//執(zhí)行第一輪宏任務隊列(macro)
golb1
glob1_promise
glob2_promise
//執(zhí)行第一輪微任務隊列(micro)
glob1_nextTick
glob2_nextTick
glob1_then
glob2_then
第一輪事件循環(huán)結束
//執(zhí)行第二輪宏任務中的setTimeout隊列(macro)
timeout1
timeout1_promise
timeout2
timeout2_promise
//執(zhí)行第二輪宏任務setTimeout產生的微任務隊列(micro)
timeout1_nextTick
timeout2_nextTick
timeout1_then
timeout2_then
第二輪事件循環(huán)結束
//執(zhí)行第二輪宏任務中setImmediate隊列(macro)
immediate1
immediate1_promise
immediate2
immediate2_promise
//執(zhí)行第二輪宏任務setImmediate產生的微任務隊列(micro)
immediate1_nextTick
immediate2_nextTick
immediate1_then
immediate2_then
每次鼠標mouseDown都要重新調用getTargetPos 函數,如果在第一次拖拽之后把最后的值保存起來作為新的初始值 ,下一次拖拽就不需要重新調用方法蜈敢,直接從變量中拿到辜荠,這樣性能會不會更好?
我說一下抓狭,我的理解吧伯病,結合《JavaScript高級程序設計》和《JavaScript權威指南》對閉包的解釋,我更覺得權威指南解釋更為正確一些否过,閉包不應該說是指某個函數吧狱从,波神你根據chrome的顯示,說是外層函數叠纹,而高級程序設計恰好相反季研,說閉包是內部函數。閉包更準確的說是一項技術或者一個特性誉察,函數作用域中的變量在函數執(zhí)行完成之后就會被垃圾回收与涡,一般情況下訪問一個函數作用域中的變量,正常是無法訪問的持偏,只能通過特殊的技術或者特性來實現驼卖,就是在函數作用域中創(chuàng)建內部函數來實現,這樣就不會使得函數執(zhí)行完成變量被回收鸿秆,這種技術或者特性應該被稱為“閉包”酌畜,像是《JavaScript權威指南》打的比方,像是把變量包裹了起來卿叽,形象的稱為“閉包”桥胞。我覺得應該是這樣,而不是指某個函數是閉包考婴。發(fā)表一下個人觀點贩虾,有可能有錯誤,希望能拋磚引玉沥阱,引來大家更加深入的理解缎罢。
引言 Javascript是前端面試的重點考杉,本文重點梳理下 Javascript 中的巢呔考知識點,然后就一些容易出現的題目進行解析崇棠。限于文章的篇幅咽袜,無法將知識點講解的面面俱到...
Javascript是前端面試的重點,本文重點梳理下Javascript中的骋撞纾考知識點酬蹋,然后就一些容易出現的題目進行解析及老。限于文章的篇幅抽莱,無法將知識點講解的面面俱到范抓,因此只羅...