第4章 變量卢厂、作用域和內(nèi)存問題

4.1 基本類型與引用類型

  • 基本類型值指的是簡單的數(shù)據(jù)段,而引用類型值指那些可能由多個值構(gòu)成的對象惠啄。
  • 基本數(shù)據(jù)類型: Undefined 慎恒、 Null 、 Boolean 撵渡、 Number 和 String
  • 基本類型按值訪問融柬,可以直接操作保存在變量中的實(shí)際值
  • 引用類型按引用訪問,因?yàn)镴S不允許直接訪問內(nèi)存中的對象

4.1.1 動態(tài)屬性

var person = new Object();
person.name = "Nicholas";
alert(person.name); //"Nicholas"
//引用類型值可以動態(tài)地添加屬性趋距,以便將來使用

var name = "Nicholas";
name.age = 27;
alert(name.age); //undefined
//基本類型不能動態(tài)添加屬性

4.1.2 復(fù)制變量值

var num1 = 5;
var num2 = num1;
//num1與num2中的 5 是完全獨(dú)立的

var obj1 = new Object();
var obj2 = obj1;
obj1.name = "Nicholas";
alert(obj2.name); //"Nicholas"
//obj1與obj2 始終指向的是一個對象粒氧,復(fù)制的僅是對象地址(指針)

4.1.3 傳遞參數(shù)

  • ECMAScript中的函數(shù)都是按值傳遞
  • 變量傳到函數(shù)里會復(fù)制給一個局部變量(arguments對象中的一個元素),函數(shù)執(zhí)行結(jié)束立即后銷毀
function setName(obj) {
  obj.name = "Nicholas"; //obj為外部person對象引用
  obj = new Object(); //重寫的obj為局部變量节腐,執(zhí)行結(jié)束后銷毀
  obj.name = "Greg";
}
var person = new Object();
setName(person);
alert(person.name); //"Nicholas"

4.1.4 檢測類型

//typeof 檢測基本類型很好外盯,檢測引用類型用處不大
alert(typeof "Nicholas"); //string
alert(typeof []); //object
alert(typeof {}); //object

//instanceof 根據(jù)原型鏈識別
'Nicholas' instanceof String //true
[] instanceof Object //true
[] instanceof Array //true

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

  1. 執(zhí)行環(huán)境(簡稱環(huán)境),執(zhí)行環(huán)境決定了變量和方法是否有權(quán)訪問其他數(shù)據(jù)翼雀,定義它們各自的行為
  2. 每個環(huán)境都有一個與之關(guān)聯(lián)的變量對象饱苟,環(huán)境中定義的變量和函數(shù)都保存在這對象中
  3. 全局執(zhí)行環(huán)境,即最外圍的環(huán)境狼渊,在wab瀏覽器中是window對象箱熬,瀏覽器、網(wǎng)頁關(guān)閉后銷毀
  4. 局部執(zhí)行環(huán)境,即每個函數(shù)自己的環(huán)境城须,當(dāng)函數(shù)執(zhí)行完畢后銷毀
  5. 當(dāng)代碼在環(huán)境中執(zhí)行時护锤,會創(chuàng)建一個作用域鏈。作用域鏈讓環(huán)境中有權(quán)訪問的屬性和方法能有序的訪問
  6. 作用域的前端酿傍,始終是當(dāng)前執(zhí)行環(huán)境的變量對象烙懦,如果是局部環(huán)境,則將活動對象作為變量對象
  7. 活動對象最開始只包含一個變量赤炒,arguments對象氯析,之后在函數(shù)中創(chuàng)建的變量和方法都在活動對象中
//全局環(huán)境 window
//作用域鏈:首位:全局環(huán)境的變量對象(屬性:color,changeColor)
var color = "blue";
//局部環(huán)境 changeColor
//作用域鏈:
//首位:局部環(huán)境的活動對象 (屬性:arguments) 
//次位:全局環(huán)境的變量對象 (屬性:color莺褒,changeColor)
function changeColor(){ 
  if (color === "blue"){
    //首位中不存在color屬性掩缓,向次位中尋找
    color = "red";  
  } else {
    color = "blue";
  }
}
changeColor();
alert("Color is now " + color); //'red'

4.2.1 延長作用域鏈

這兩個語句都會在作用域鏈的前端添加一個變量對象:

  • try-catch 語句的 catch 塊;
  • with 語句 (有兼容問題遵岩,不建議使用)

4.2.2 沒有塊級作用域

  • if / for 語句都沒有塊作用域
  • var 聲明的變量會自動被添加到最接近的環(huán)境中
  • 如果初始化變量時沒有使用 var 聲明你辣,該變量會自動被添加到全局環(huán)境
  • 讀取或?qū)懭胱兞繒r程序會從作用域鏈的前端開始,向上逐級查詢與給定名字匹配的標(biāo)識符
//if 語句沒有塊作用域
if (true) {
  var color = "blue";
}
alert(color); //"blue"

//for 語句沒有塊作用域
for (var i=0; i < 10; i++){
  doSomething(i);
}
alert(i); //10

//sum 沒有使用 var 聲明尘执,被添加到全局環(huán)境
function add(num1, num2) {
sum = num1 + num2;
return sum;
}
var result = add(10, 20); //30
alert(sum); //30

4.2 垃圾回收

略..

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末舍哄,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子誊锭,更是在濱河造成了極大的恐慌表悬,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,807評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件丧靡,死亡現(xiàn)場離奇詭異蟆沫,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)温治,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評論 3 399
  • 文/潘曉璐 我一進(jìn)店門饭庞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人熬荆,你說我怎么就攤上這事舟山。” “怎么了惶看?”我有些...
    開封第一講書人閱讀 169,589評論 0 363
  • 文/不壞的土叔 我叫張陵捏顺,是天一觀的道長。 經(jīng)常有香客問我纬黎,道長,這世上最難降的妖魔是什么劫窒? 我笑而不...
    開封第一講書人閱讀 60,188評論 1 300
  • 正文 為了忘掉前任本今,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘冠息。我一直安慰自己挪凑,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,185評論 6 398
  • 文/花漫 我一把揭開白布逛艰。 她就那樣靜靜地躺著躏碳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪散怖。 梳的紋絲不亂的頭發(fā)上菇绵,一...
    開封第一講書人閱讀 52,785評論 1 314
  • 那天,我揣著相機(jī)與錄音镇眷,去河邊找鬼咬最。 笑死,一個胖子當(dāng)著我的面吹牛欠动,可吹牛的內(nèi)容都是我干的永乌。 我是一名探鬼主播,決...
    沈念sama閱讀 41,220評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼具伍,長吁一口氣:“原來是場噩夢啊……” “哼翅雏!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起人芽,我...
    開封第一講書人閱讀 40,167評論 0 277
  • 序言:老撾萬榮一對情侶失蹤枚荣,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后啼肩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體橄妆,經(jīng)...
    沈念sama閱讀 46,698評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,767評論 3 343
  • 正文 我和宋清朗相戀三年祈坠,在試婚紗的時候發(fā)現(xiàn)自己被綠了害碾。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,912評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡赦拘,死狀恐怖慌随,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情躺同,我是刑警寧澤阁猜,帶...
    沈念sama閱讀 36,572評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站蹋艺,受9級特大地震影響剃袍,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜捎谨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,254評論 3 336
  • 文/蒙蒙 一民效、第九天 我趴在偏房一處隱蔽的房頂上張望憔维。 院中可真熱鬧,春花似錦畏邢、人聲如沸业扒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽程储。三九已至,卻和暖如春臂寝,著一層夾襖步出監(jiān)牢的瞬間章鲤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評論 1 274
  • 我被黑心中介騙來泰國打工交煞, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留咏窿,地道東北人。 一個月前我還...
    沈念sama閱讀 49,359評論 3 379
  • 正文 我出身青樓素征,卻偏偏與公主長得像集嵌,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子御毅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,922評論 2 361