97国产精品视频人人做人人爱,3344在线观看无码,成年人国产视频,欧美日一级片,在线看AV天堂,高清无码一本到东京热,欧美一级黄片一区2区,免费又爽又刺激高潮网址

關(guān)于JS中作用域的銷毀和不銷毀的情況總結(jié)

2021-7-26    前端達(dá)人

window全局作用域->頁面關(guān)掉才銷毀
函數(shù)執(zhí)行會形成私有的作用域

1)作用域的銷毀
一般情況下,函數(shù)執(zhí)行形成一個私有的作用域,當(dāng)執(zhí)行完成后就銷毀了->節(jié)省內(nèi)存空間

2)作用域的不立即銷毀
function fn(){
var i=10;
return function(n){
console.log(n+i++);
}
}
fn()(15);//->先執(zhí)行fn,有一個私有的變量i=10,返回一個堆內(nèi)存地址 xxxfff111,我們發(fā)現(xiàn)這個地址還用到了一次,那么當(dāng)前的這個fn形成私有作用域(A)就不能立即銷毀了,xxxfff111(15)->輸出25,A中的i變?yōu)?1;當(dāng)xxxfff111執(zhí)行完了,發(fā)現(xiàn)這個地址沒用了,瀏覽器就把A、xxxfff111都釋放了

fn()(20);//->在執(zhí)行fn的時候一切都從新開始了,和上面的步驟是一樣的->輸出30

3)作用域的不銷毀:形成一個私有作用域,里面的內(nèi)容被外面占用了
function fn(){
var i=10;
return function(n){
console.log(n+i++);
}
}
var f=fn();//->fn執(zhí)行形成一個私有的作用域A,A中有一個私有的變量i=10,A中返回一個地址xxxfff11,被外面的f占用了,那么當(dāng)前的A就不能銷毀了
f(15);//->輸出25,讓A中的i=11
f(20);//->輸出31,讓A中的i=12
...
當(dāng)我們知道f用完的時候,為了優(yōu)化性能,我們讓f=null,這樣的話A中的xxxfff111沒人占用了,瀏覽器會把A和xxxfff111都釋放了


幾種不銷毀常用到的形式:
1)函數(shù)執(zhí)行,返回一個引用數(shù)據(jù)類型的值,并且在函數(shù)的外面被別人接收了,那么當(dāng)前函數(shù)形成的私有作用域就不在銷毀了-->例如上面的案例

2)在函數(shù)執(zhí)行的時候,里面的一個小函數(shù)的地址賦值給了我們的外面元素的點擊事件,那么當(dāng)前小函數(shù)也相當(dāng)于被外面占用了,大函數(shù)執(zhí)行形成的私有的作用域也不銷毀了
//每一次循環(huán)都執(zhí)行自執(zhí)行函數(shù)形成一個私有的作用域(循環(huán)三次就有三個作用域,每一個作用域中都有一個i,第一個存儲的是0,第二個存數(shù)的是1..),在每一個私有的作用域中都把里面的函數(shù)綁定給了外面元素的點擊事件,這樣的話每一次形成的作用域都不銷毀了(三個不銷毀的作用域)
var oLis=document.getElementsByTagName("li");
for(var i=0;i<oLis.length;i++){
~function(i){
oLis[i].onclick=function(){
tabChange(i);
}
}(i);
}

3)在使用setTimeout實現(xiàn)輪詢動畫的時候,我們?nèi)绻鹠ove需要傳遞參數(shù)值,那么像下面這樣的寫法會行成很多的不銷毀的作用域,非常的耗性能
function move(tar){
<js code>

//window.setTimeout(move,10); ->第二次執(zhí)行move的時候我們沒有給它傳值(這樣寫不行)
window.setTimeout(function(){
move(tar);
},10);//->這樣寫實現(xiàn)了,但是每一次執(zhí)行定時器都會形成一個私有的所用域(匿名函數(shù)形成的)A,在A中使用了上級作用域中的tar的值,而且執(zhí)行了move又形成了一個小的作用域(而在小的作用域中會使用tar的值),這樣每一次定時器形成的A都不能銷毀了
}
move(100);//->第一次這樣執(zhí)行傳遞100

//解決辦法:
function move(tar){
~function _move(){
<js code>
window.setTimeout(_move,10);
}();
}
move(100);//->第一次這樣執(zhí)行傳遞100


JS中內(nèi)存空間釋放的問題(堆內(nèi)存、棧內(nèi)存)
[谷歌瀏覽器]
我們開辟一個內(nèi)存,可能或有一些其他的變量等占用了這個內(nèi)存,谷歌瀏覽器都會間隔一段時間看這個內(nèi)存還有沒有被占用,如果發(fā)現(xiàn)有沒有被占用的內(nèi)存了,就自己幫我們回收了(內(nèi)存釋放)

[火狐和IE]
我們開個內(nèi)存,當(dāng)我們引用了它,就在內(nèi)存中記錄一個數(shù),增加一個引用瀏覽器就把這個數(shù)+1,減少一個引用,瀏覽器就把這個數(shù)-1...當(dāng)減到零的時候瀏覽器就把這個內(nèi)存釋放了;但是有些情況下(尤其是IE)記著記著就弄亂了,內(nèi)存就不能釋放了-->瀏覽器的內(nèi)存泄露

var obj={};
我們養(yǎng)成一個好的習(xí)慣,當(dāng)我們obj這個對象使用完成了,我們手動的obj=null (null空對象指針),瀏覽器會自己把剛才的堆內(nèi)存釋放掉

標(biāo)簽: javascript




藍(lán)藍(lán)設(shè)計建立了UI設(shè)計分享群,每天會分享國內(nèi)外的一些優(yōu)秀設(shè)計,如果有興趣的話,可以進入一起成長學(xué)習(xí),請掃碼藍(lán)小助,報下信息,藍(lán)小助會請您入群。歡迎您加入噢~~希望得到建議咨詢、商務(wù)合作,也請與我們聯(lián)系。

截屏2021-05-13 上午11.41.03.png



文章來源:博客園

分享此文一切功德,皆悉回向給文章原作者及眾讀者.
免責(zé)聲明:藍(lán)藍(lán)設(shè)計尊重原作者,文章的版權(quán)歸原作者。如涉及版權(quán)問題,請及時與我們?nèi)〉寐?lián)系,我們立即更正或刪除。

藍(lán)藍(lán)設(shè)計www.0391cbd.com )是一家專注而深入的界面設(shè)計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計、BS界面設(shè)計 、 cs界面設(shè)計 、 ipad界面設(shè)計 、 包裝設(shè)計 、 圖標(biāo)定制 、 用戶體驗 、交互設(shè)計、 網(wǎng)站建設(shè) 平面設(shè)計服務(wù)


日歷

鏈接

個人資料

存檔

主站蜘蛛池模板: 午夜国产大片免费观看| 欧洲精品视频在线观看| 亚洲成人免费看| 国产精品夜夜嗨视频免费视频| 欧美在线国产| 久久99国产乱子伦精品免| 91区国产福利在线观看午夜| 中文字幕亚洲综久久2021| 色视频国产| 最新亚洲av女人的天堂| 国产AV毛片| 真实国产精品vr专区| 97青青青国产在线播放| 88av在线| 国产91丝袜在线播放动漫| 日韩中文精品亚洲第三区| 97se亚洲综合在线天天 | 亚洲色精品国产一区二区三区| 国产精品香蕉在线| 色综合激情网| 免费观看男人免费桶女人视频| 亚洲水蜜桃久久综合网站| 一区二区三区高清视频国产女人| 一级毛片基地| 色综合久久88| 国产精品3p视频| 青青草一区二区免费精品| 99在线视频免费| 麻豆精品国产自产在线| 色偷偷综合网| 99这里只有精品在线| 午夜视频日本| 人妻91无码色偷偷色噜噜噜| 国产福利一区在线| 熟妇无码人妻| 97国内精品久久久久不卡| 拍国产真实乱人偷精品| 黄色网页在线观看| 亚洲精品在线91| 亚洲性视频网站| 亚洲成人www| 99热这里只有精品久久免费| 日本午夜精品一本在线观看| 久久精品人人做人人爽电影蜜月| 毛片三级在线观看| 欧美激情伊人| 久久综合久久鬼| 真人高潮娇喘嗯啊在线观看| 91福利免费视频| 色悠久久久久久久综合网伊人| 亚洲人成网线在线播放va| 自拍欧美亚洲| 麻豆国产在线不卡一区二区| 久久精品国产999大香线焦| 午夜视频www| 久久人妻xunleige无码| 午夜无码一区二区三区在线app| 国产综合网站| 亚洲色图综合在线| 99ri国产在线| 精品一区二区三区波多野结衣| 久久婷婷五月综合色一区二区| 亚洲 欧美 中文 AⅤ在线视频| 国产精品jizz在线观看软件| 波多野结衣视频一区二区 | 国产一区二区三区精品欧美日韩| 欧美日韩在线国产| 国产日韩AV高潮在线| 中文字幕 日韩 欧美| 国内精品伊人久久久久7777人| 四虎成人精品在永久免费| 日本免费a视频| 丰满少妇αⅴ无码区| 国产成人精品一区二区秒拍1o| 免费在线视频a| 麻豆精品在线| 男女猛烈无遮挡午夜视频| 日韩精品资源| 特级精品毛片免费观看| 婷婷六月色| 国产一级毛片网站| 午夜视频在线观看免费网站|