亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

高程3總結(jié)#第4章變量、作用域和內(nèi)存問題

xumenger / 1101人閱讀

摘要:當(dāng)代碼在一個(gè)環(huán)境中執(zhí)行時(shí),會(huì)創(chuàng)建變量對象的一個(gè)作用域鏈。作用域鏈的用途,是保證對執(zhí)行環(huán)境有權(quán)訪問的所有變量和函數(shù)的有序訪問。這樣,一直延續(xù)到全局執(zhí)行環(huán)境全局執(zhí)行環(huán)境的變量對象始終都是作用域鏈中的最后一個(gè)對象。

變量、作用域和內(nèi)存問題 基本類型和引用類型的值

基本類型值指的是簡單的數(shù)據(jù)段,而引用類型值值那些可能由多個(gè)值構(gòu)成的對象。

定義基本類型值的引用和引用類型值的方法是類似的,創(chuàng)建一個(gè)變量并為該變量賦值。對于引用類型的值我們可以為其添加屬性和方法,也可以改變屬性和方法。不能給基本類型的值添加屬性。

var person=new Object();
person.name="Nicholas";
alert(person.name);//"Nicholas"
var name="Nicolas";
name.age=27;
alert(name.age);//undefined

如果從一個(gè)變量向另一個(gè)變量賦值基本類型的值,會(huì)在變量對象上創(chuàng)建一個(gè)新值,然后把該值復(fù)制到為新變量分配的位置上。當(dāng)從一個(gè)變量向另一個(gè)變量復(fù)制引用類型的值時(shí),同樣也會(huì)將存儲(chǔ)在變量中的值復(fù)制一份放到為新變量分配的空間中。不同的是,這個(gè)值的副本實(shí)際上是一個(gè)指針,而這個(gè)指針指向存儲(chǔ)在堆中的一個(gè)對象。復(fù)制操作結(jié)束后,兩個(gè)變量實(shí)際上將引用同一個(gè)對象。因此改變其中一個(gè)變量就會(huì)影響另一個(gè)變量。

var num1=5;
var num2=num1;

var obj1=new Object();
var obj2=obj1;
obj1.name="Nicholas";
alert(obj2.name);//"Nicholas";


所有函數(shù)的參數(shù)都是按值傳遞的。

在向參數(shù)傳遞羈絆類型的值時(shí),被傳遞的值會(huì)被復(fù)制給一個(gè)局部變量,在向參數(shù)出傳遞引用類型的值時(shí),會(huì)把這個(gè)值在內(nèi)存中的地址復(fù)制給一個(gè)局部變量,因此這個(gè)局部變量的變化會(huì)反映在函數(shù)的外部。

function addTen(num){
  num+=10;
  return num;
}
var count=20;
var result=addTen(count);
alert(count);//沒有變化
alert(result);//30

function setName(obj){
  obj.name="Nicholas";
}
var person=new Object();
setName(person);
alert(person.name);//"Nicholas"

function setName(obj){
  obj.name="Nicholas";
  obj=new Object();
  obj.name="Greg";
}
var person=new Object;
setName(person);
alert(person.name);//"Nicholas"

typeof操作符是卻行一個(gè)變量是字符串、數(shù)值、布爾值還是undefined的最佳工具

var a="Nicholas";
var b=true;
var i=22;
var u;
var n=null;
var o=new Object();

alert(typeof a);//string
alert(typeof i);//number
alert(typeof b);//boolean
alert(typeof u);//undefined
alert(typeof n);//object
alert(typeof o);//object

監(jiān)測應(yīng)用類型的值時(shí),這個(gè)操作符用處不大。ECMAScript提供了instanceof操作符。

alert(person instanceof Object)//變量person是Object么?
alert(colors instanceof Array)//變量color是Array么?
alert(pattern instanceof RegExp)//變量pattern是RegExp么?

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

執(zhí)行環(huán)境定義了變量或函數(shù)有權(quán)訪問的其他數(shù)據(jù),決定了它們各自的行為。每個(gè)執(zhí)行環(huán)境都有一個(gè)與之關(guān)聯(lián)的變量對象,環(huán)境中定義的所有變量和函數(shù)都保存在這個(gè)對象中。

全局執(zhí)行環(huán)境是最外圍的一個(gè)執(zhí)行環(huán)境

每個(gè)函數(shù)都有自己的執(zhí)行環(huán)境。當(dāng)執(zhí)行流進(jìn)入一個(gè)函數(shù)時(shí),函數(shù)的花名就會(huì)被推入一個(gè)環(huán)境棧中。而在函數(shù)執(zhí)行之后,棧將其環(huán)境彈出,把控制權(quán)返回給之前的執(zhí)行環(huán)境。

當(dāng)代碼在一個(gè)環(huán)境中執(zhí)行時(shí),會(huì)創(chuàng)建變量對象的一個(gè)作用域鏈。

作用域鏈的用途,是保證對執(zhí)行環(huán)境有權(quán)訪問的所有變量和函數(shù)的有序訪問。

作用域鏈的前端,始終都是當(dāng)前執(zhí)行的代碼所在環(huán)境的變量對象。如果這個(gè)環(huán)境是函數(shù),則將其活動(dòng)對象作為變量對象。

作用域鏈中的下一個(gè)變量對象來自包含環(huán)境,而再下一個(gè)變量對象則來自下一個(gè)包含環(huán)境。這樣,一直延續(xù)到全局執(zhí)行環(huán)境;全局執(zhí)行環(huán)境的變量對象始終都是作用域鏈中的最后一個(gè)對象。

垃圾收集

垃圾收集,執(zhí)行環(huán)境會(huì)負(fù)責(zé)管理代碼執(zhí)行過程中使用的內(nèi)存。找出那些不再繼續(xù)使用的變量,然后釋放其占用的內(nèi)存。為此,垃圾收集器會(huì)按照固定的時(shí)間間隔,周期性地執(zhí)行這一操作。局部變量只在函數(shù)執(zhí)行的過程中存在。而在這個(gè)過程中,會(huì)為局部變量在棧(或堆)內(nèi)存上分配相應(yīng)的空間,以便存儲(chǔ)它們的值。然后在函數(shù)中使用這些變量,直至函數(shù)執(zhí)行結(jié)束。此時(shí),局部變量就沒有存在的必要了,因此可以釋放它們的內(nèi)存以供將來使用。在這種情況下,很容易判斷變量是否還有存在的必要;但并非所有情況下都這么容易就能得出結(jié)論。垃圾收集器必須跟蹤哪個(gè)變量有用哪個(gè)變量沒用,對于不再有用的變量打上標(biāo)記,以備將來收回其占用的內(nèi)存。用于標(biāo)識(shí)無用變量的策略可能會(huì)因?qū)崿F(xiàn)而異,但具體到瀏覽器中的實(shí)現(xiàn),則通常有兩個(gè)策略。

標(biāo)記清除,當(dāng)變量進(jìn)入環(huán)境時(shí),就將這個(gè)變量標(biāo)記為"進(jìn)入環(huán)境"。當(dāng)變量離開環(huán)境時(shí),將其標(biāo)記為"離開環(huán)境"。它會(huì)去掉環(huán)境中的變量以及被環(huán)境中的變量引用的變量的標(biāo)記。而在此之后再被加上標(biāo)記的變量將被視為準(zhǔn)備刪除的變量,原因是環(huán)境中的變量已經(jīng)無法訪問到這些變量了。最后,垃圾收集器完成內(nèi)存清除工作,銷毀那些帶標(biāo)記的值并回收它們所占用的內(nèi)存空間。

引用計(jì)數(shù),跟蹤記錄每個(gè)值被引用的次數(shù)。當(dāng)聲明了一個(gè)變量并將一個(gè)引用類型值賦給該變量時(shí),則這個(gè)值的引用次數(shù)就是 1。如果同一個(gè)值又被賦給另一個(gè)變量,則該值的引用次數(shù)加 1。相反,如果包含對這個(gè)值引用的變量又取得了另外一個(gè)值,則這個(gè)值的引用次數(shù)減 1。當(dāng)這個(gè)值的引用次數(shù)變成 0 時(shí),則說明沒有辦法再訪問這個(gè)值了,因而就可以將其占用的內(nèi)存空間回收回來。這樣,當(dāng)垃圾收集器下次再運(yùn)行時(shí),它就會(huì)釋放那些引用次數(shù)為零的值所占用的內(nèi)存。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/97470.html

相關(guān)文章

  • 高程變量作用域和內(nèi)存問題

    摘要:不允許直接訪問內(nèi)存中的位置,也就是說不能直接操作對象的內(nèi)存空間。在操作對象時(shí),實(shí)際上是在操作對象的引用而不是實(shí)際的對象。解除引用的真正作用是讓值脫離執(zhí)行環(huán)境,以便垃圾收集器下次運(yùn)行時(shí)將其回收 1 基本類型和引用類型的值 基本數(shù)據(jù)類型是按值訪問的,因?yàn)榭梢圆僮鞅4嬖谧兞恐械膶?shí)際的值 基本類型值在內(nèi)存中占據(jù)固定大小的空間,因此被保存在棧內(nèi)存中 引用類型的值是保存在內(nèi)存中的對象。JavaSc...

    xavier 評論0 收藏0
  • JS學(xué)習(xí)筆記(4)(變量、作用域和內(nèi)存問題

    摘要:具體來說就是當(dāng)執(zhí)行流進(jìn)入下列任何一個(gè)語句時(shí),作用域鏈就會(huì)得到加長語句的塊和語句。這兩個(gè)語句都會(huì)在作用域鏈的前端添加一個(gè)變量對象。對來說,會(huì)將指定的對象添加到作用域鏈中。 1. 基本類型和引用類型的值 JavaScript變量可以用來保存兩種類型的值:基本類性值和引用類性值?;绢愋椭翟醋砸韵?種基本數(shù)據(jù)類型:Undefined、Null、Boolean、Number和String?;?..

    linkin 評論0 收藏0
  • 紅寶書筆記-4-變量作用域和內(nèi)存問題

    showImg(https://segmentfault.com/img/bVbwfHP?w=1919&h=2347);

    nemo 評論0 收藏0
  • 《JavaScript高級(jí)程序設(shè)計(jì)》(3版)讀書筆記 4 變量、作用域和內(nèi)存問題

    摘要:具體說就是執(zhí)行流進(jìn)入下列任何一個(gè)語句時(shí),作用域鏈就會(huì)得到加長語句的塊。如果局部環(huán)境中存在著同名的標(biāo)識(shí)符,就不會(huì)使用位于父環(huán)境中的標(biāo)識(shí)符訪問局部變量要比訪問全局變量更快,因?yàn)椴挥孟蛏纤阉髯饔糜蜴湣? 基本類型和引用類型的值 ECMAscript變量包含 基本類型值和引用類型值 基本類型值值的是基本數(shù)據(jù)類型:Undefined, Null, Boolean, Number, String ...

    lidashuang 評論0 收藏0
  • 高程3總結(jié)#8BOM

    摘要:對象的核心對象是,它表示瀏覽器的一個(gè)實(shí)例。而和則表示該容器中頁面視圖區(qū)的大小。在中,與返回相同的值,即視口大小而非瀏覽器窗口大小。第三個(gè)參數(shù)是一個(gè)逗號(hào)分隔的設(shè)置字符串,表示在新窗口中都顯示哪些特性。這應(yīng)該是用戶打開窗口后的第一個(gè)頁面 BOM window對象 BOM的核心對象是window,它表示瀏覽器的一個(gè)實(shí)例。在瀏覽器中,window對象有雙重角色,它既是通過JavaScript訪...

    MASAILA 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<