国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網(wǎng)站 > WEB開發(fā) > 正文

javascript筆記--(第十二章)變量、作用域及內(nèi)存

2024-04-27 15:03:40
字體:
供稿:網(wǎng)友

基本類型和引用類型的存儲(chǔ)

復(fù)制變量值

基本類型和引用類型的變量復(fù)制是不一樣的基本類型的變量復(fù)制:
<script type="text/javascript">	var box = 'Lee';		//在棧內(nèi)存生成一個(gè)box 'Lee'	var box2 = box;			//在棧內(nèi)存再生成一個(gè)box2 'Lee'</script>引用類型的變量復(fù)制:
<script type="text/Javascript">	var box = new Object();			//創(chuàng)建一個(gè)引用類型	box.name = 'Lee';				//新增一個(gè)屬性	var box2 = box;					//把引用地址賦值給box2</script>

檢測類型

雖然typeof運(yùn)算符在檢查基本數(shù)據(jù)類型的時(shí)候非常好用,但檢測引用類型的時(shí)候,它就不是那么好用了。通常,我們并不想知道它是不是對(duì)象,而是想知道它到底是什么類型的對(duì)象。因?yàn)閿?shù)組也是object,null也是Object等等。這時(shí)我們可以采用instanceof運(yùn)算符來查看。
<script type="text/javascript">	var box = [1,2,3];	console.log(box instanceof Array);		//true	console.log(box instanceof Object);		//true	var box2 = {};	console.log(box2 instanceof Object);		//true	var box3 = /g/;	console.log(box3 instanceof RegExp);		//true	var box4 = new String('Lee');	console.log(box4 instanceof String);		//true	var a = "lisong";	console.log(a instanceof String);		//false</script>當(dāng)使用instanceof檢查基本類型的值時(shí),它會(huì)返回false

執(zhí)行環(huán)境及作用域

全局執(zhí)行環(huán)境是最外圍的執(zhí)行環(huán)境。在Web瀏覽器中,全局執(zhí)行環(huán)境被認(rèn)為是window對(duì)象。因此所有的全局變量和函數(shù)都是作為window對(duì)象的屬性和方法創(chuàng)建的。當(dāng)執(zhí)行環(huán)境中的所有代碼執(zhí)行完畢后,該環(huán)境被銷毀,保存在其中的所有變量和函數(shù)定義也隨之銷毀。如果是全局環(huán)境下,需要程序執(zhí)行完畢,或者網(wǎng)頁被關(guān)閉才會(huì)銷毀。每個(gè)執(zhí)行環(huán)境都有一個(gè)與之關(guān)聯(lián)的變量對(duì)象,就好比全局的window可以調(diào)用變量和屬性一樣。局部的環(huán)境也有一個(gè)類似window 的變量對(duì)象,環(huán)境中定義的所有變量和函數(shù)都保存在這個(gè)對(duì)象中。(我們無法訪問這個(gè)變量對(duì)象,但解析器會(huì)處理數(shù)據(jù)時(shí)后臺(tái)使用它)
<script type="text/javascript">	var box = 'blue';	function setBox() {		function setColor() {			var b = 'orange';			alert(box);			alert(b);		}		setColor();			//setColor()的執(zhí)行環(huán)境在setBox()內(nèi)	}	setBox();</script>每個(gè)函數(shù)被調(diào)用時(shí)都會(huì)創(chuàng)建自己的執(zhí)行環(huán)境。當(dāng)執(zhí)行到這個(gè)函數(shù)時(shí),函數(shù)的環(huán)境就會(huì)被推到環(huán)境棧中去執(zhí)行,而執(zhí)行后又在環(huán)境棧中彈出(退出),把控制權(quán)交給上一級(jí)的執(zhí)行環(huán)境。var關(guān)鍵字在函數(shù)里的區(qū)別:
function box(num1, num2) {	var sum = num1 + num2;	//如果去掉var就是全局變量了	return sum;}alert(box(10,10));alert(sum);			//報(bào)錯(cuò)變量查詢中,訪問局部變量要比全局變量更快,因?yàn)椴恍枰蛏纤阉髯饔糜蜴湥人阉鞯降膬?yōu)先級(jí)高。塊級(jí)作用域表示諸如if語句等有花括號(hào)封閉的代碼塊。但是在js中是沒有塊級(jí)作用域的,即使for語句也不存在塊級(jí)作用域。

內(nèi)存問題

JavaScript具有自動(dòng)垃圾收集機(jī)制,也就是說,執(zhí)行環(huán)境會(huì)負(fù)責(zé)管理代碼執(zhí)行過程中使用的內(nèi)存。其他語言比如C和C++,必須手工跟蹤內(nèi)存使用情況,適時(shí)的釋放,否則會(huì)造成很多問題。而JavaScript則不需要這樣,它會(huì)自行管理內(nèi)存分配及無用內(nèi)存的回收。JavaScript最常用的垃圾收集方式是標(biāo)記清除。垃圾收集器會(huì)在運(yùn)行的時(shí)候給存儲(chǔ)在內(nèi)存中的變量加上標(biāo)記。然后,它會(huì)去掉環(huán)境中正在使用變量的標(biāo)記,而沒有被去掉標(biāo)記的變量將被視為準(zhǔn)備刪除的變量。最后,垃圾收集器完成內(nèi)存清理工作,銷毀那些帶標(biāo)記的值并回收他們所占用的內(nèi)存空間。垃圾收集器是周期性運(yùn)行的,這樣會(huì)導(dǎo)致整個(gè)程序的性能問題。比如IE7以前的版本,它的垃圾收集器是根據(jù)內(nèi)存分配量運(yùn)行的,比如256個(gè)變量就開始運(yùn)行垃圾收集器,這樣,就不得不頻繁地運(yùn)行,從而降低的性能。一般來說,確保占用最少的內(nèi)存可以讓頁面獲得更好的性能。那么優(yōu)化內(nèi)存的最佳方案,就是一旦數(shù)據(jù)不再有用,那么將其設(shè)置為null來釋放引用,這個(gè)做法叫做解除引用。這一做法適用于大多數(shù)全局變量和全局對(duì)象。
上一篇:spring boot 整合mybatis

下一篇:6.嵌套

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 顺昌县| 中山市| 垫江县| 山丹县| 民乐县| 乡宁县| 苏州市| 车险| 涪陵区| 新巴尔虎右旗| 安远县| 洛川县| 澜沧| 阿拉尔市| 丽水市| 闽侯县| 康平县| 岗巴县| 宣恩县| 德阳市| 莒南县| 平潭县| 兴义市| 杭州市| 师宗县| 丹东市| 田阳县| SHOW| 乾安县| 天门市| 神木县| 景宁| 上栗县| 随州市| 霍山县| 中阳县| 漳州市| 镇远县| 平塘县| 贵港市| 九龙城区|