Javascript-變量堵腹、作用域炸站、內(nèi)存問題

一、基本類型和引用類型的值

首先疚顷,我們知道JS的數(shù)據(jù)類型有6種:Undefined旱易、Null、Boolean腿堤、Number咒唆、String、Object
如果從用圖和功能上分的話释液,我們可以分為兩大類:

  • 基本類型:Undefined全释、Null、Boolean误债、Number浸船、String
  • 引用類型:Object
    這兩種類型的區(qū)別:

1、保存的方式不同

基本數(shù)據(jù)類型是按值訪問的寝蹈,因?yàn)榭梢圆僮鞅4嬖谧兞恐械膶?shí)際的值李命。引用類型的值是保存在內(nèi)存中的對象。與其他語言不同箫老,JavaScript 不允許直接訪問內(nèi)存中的位置封字,也就是說不能直接操作對象的內(nèi)存空間。在操作對象時耍鬓,實(shí)際上是在操作對象的引用而不是實(shí)際的對象阔籽。

并且引用類型的值可以添加屬性和方法,或者改變刪除屬性和方法牲蜀。

2笆制、復(fù)制變量的值

當(dāng)從一個變量向另一個變量復(fù)制引用類型的值時,同樣也會將存儲在變量對象中的值復(fù)制一份放到為新變量分配的空間中涣达。不同的是在辆,這個值的副本實(shí)際上是一個指針证薇,而這個指針指向存儲在堆中的一個對象。復(fù)制操作結(jié)束后匆篓,兩個變量實(shí)際上將引用同一個對象浑度。因此,改變其中一個變量鸦概,就會影響另一個變量

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

3俺泣、傳遞參數(shù)

ECMAScript 中所有函數(shù)的參數(shù)都是按值傳遞的。也就是說完残,把函數(shù)外部的值復(fù)制給函數(shù)內(nèi)部的參數(shù)伏钠,就和把值從一個變量復(fù)制到另一個變量一樣

4、檢測類型(instanceof)

instanceof 可以用來檢測一個變量是什么類型的對象谨设,例如:

alert(person instanceof Object); // 變量person 是Object 嗎熟掂?
alert(colors instanceof Array); // 變量colors 是Array 嗎?
alert(pattern instanceof RegExp); // 變量pattern 是RegExp 嗎扎拣?

二赴肚、重點(diǎn)理解作用域和作用域鏈

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

執(zhí)行環(huán)境其實(shí)定義了變量或者函數(shù)訪問其他數(shù)據(jù)的權(quán)限范圍二蓝。每個執(zhí)行環(huán)境都有一個與它相關(guān)聯(lián)的變量對象(variable object)誉券,在環(huán)境中定義的所有變量和函數(shù)都保存在這個對象中。

  • 全局執(zhí)行環(huán)境
var color = "red";

上述代碼其實(shí)在全局環(huán)境中執(zhí)行的刊愚,在web瀏覽器中踊跟,與全局環(huán)境相關(guān)聯(lián)的對象是window,所以我們可以通過window.color訪問這個變量鸥诽。注意:某個執(zhí)行環(huán)境中的所有代碼執(zhí)行完畢后商玫,該環(huán)境被銷毀,保存在其中的所有變量和函數(shù)定義也隨之銷毀

  • 函數(shù)執(zhí)行環(huán)境(局部環(huán)境)
    每個函數(shù)也會有自己的執(zhí)行環(huán)境牡借。

2拳昌、作用域鏈

當(dāng)代碼在一個環(huán)境中執(zhí)行時,會創(chuàng)建變量對象的一個作用域鏈(scope chain)钠龙。作用域鏈的用途炬藤,是保證對執(zhí)行環(huán)境有權(quán)訪問的所有變量和函數(shù)的有序訪問。作用域鏈的前端碴里,始終都是當(dāng)前執(zhí)行的代碼所在環(huán)境的變量對象沈矿。如果這個環(huán)境是函數(shù),則將其活動對象(activation object)作為變量對象并闲∠杆活動對象在最開始時只包含一個變量,即arguments 對象(這個對象在全局環(huán)境中是不存在的)帝火。作用域鏈中的下一個變量對象來自包含(外部)環(huán)境溜徙,而再下一個變量對象則來自下一個包含環(huán)境。這樣犀填,一直延續(xù)到全局執(zhí)行環(huán)境蠢壹;全局執(zhí)行環(huán)境的變量對象始終都是作用域鏈中的最后一個對象。

  • 延長作用域鏈
    通過with 九巡、 try catch 語句
function buildUrl() {
    var qs = "?debug=true";
        with(location){
                var url2 = href + qs;
        }   
    return url;
}
  • 沒有塊級作用域
    對比其他的類C語言图贸,由花括號封閉的代碼塊都有自己的作用域(如果用ECMAScript 的話來講,就是它們自己的執(zhí)行環(huán)境)冕广,而ECMAScript沒有塊級作用域
if (true) {
  var color = "blue";
}
alert(color); //"blue"
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末疏日,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子撒汉,更是在濱河造成了極大的恐慌沟优,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,222評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件睬辐,死亡現(xiàn)場離奇詭異挠阁,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)溯饵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,455評論 3 385
  • 文/潘曉璐 我一進(jìn)店門侵俗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人丰刊,你說我怎么就攤上這事隘谣。” “怎么了啄巧?”我有些...
    開封第一講書人閱讀 157,720評論 0 348
  • 文/不壞的土叔 我叫張陵洪橘,是天一觀的道長。 經(jīng)常有香客問我棵帽,道長熄求,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,568評論 1 284
  • 正文 為了忘掉前任逗概,我火速辦了婚禮弟晚,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘逾苫。我一直安慰自己卿城,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,696評論 6 386
  • 文/花漫 我一把揭開白布铅搓。 她就那樣靜靜地躺著瑟押,像睡著了一般。 火紅的嫁衣襯著肌膚如雪星掰。 梳的紋絲不亂的頭發(fā)上多望,一...
    開封第一講書人閱讀 49,879評論 1 290
  • 那天嫩舟,我揣著相機(jī)與錄音,去河邊找鬼怀偷。 笑死家厌,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的椎工。 我是一名探鬼主播饭于,決...
    沈念sama閱讀 39,028評論 3 409
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼维蒙!你這毒婦竟也來了掰吕?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,773評論 0 268
  • 序言:老撾萬榮一對情侶失蹤颅痊,失蹤者是張志新(化名)和其女友劉穎殖熟,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體八千,經(jīng)...
    沈念sama閱讀 44,220評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡吗讶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,550評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了恋捆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片照皆。...
    茶點(diǎn)故事閱讀 38,697評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖沸停,靈堂內(nèi)的尸體忽然破棺而出膜毁,到底是詐尸還是另有隱情,我是刑警寧澤愤钾,帶...
    沈念sama閱讀 34,360評論 4 332
  • 正文 年R本政府宣布瘟滨,位于F島的核電站,受9級特大地震影響能颁,放射性物質(zhì)發(fā)生泄漏杂瘸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,002評論 3 315
  • 文/蒙蒙 一伙菊、第九天 我趴在偏房一處隱蔽的房頂上張望败玉。 院中可真熱鬧,春花似錦镜硕、人聲如沸运翼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,782評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽血淌。三九已至,卻和暖如春财剖,著一層夾襖步出監(jiān)牢的瞬間悠夯,已是汗流浹背癌淮。 一陣腳步聲響...
    開封第一講書人閱讀 32,010評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留疗疟,地道東北人该默。 一個月前我還...
    沈念sama閱讀 46,433評論 2 360
  • 正文 我出身青樓瞳氓,卻偏偏與公主長得像策彤,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子匣摘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,587評論 2 350

推薦閱讀更多精彩內(nèi)容