js 變量提升(1)

// 棧內(nèi)存:作用域

????1.提供一個供js代碼自上而下執(zhí)行的環(huán)境(代碼都是在棧中執(zhí)行的)

????2.由于基本數(shù)據(jù)類型比較簡單柠衍,他們都是直接在棧內(nèi)存中開辟了一個位置洋满,把值直接存儲起來

?????????=》當(dāng)棧內(nèi)存被銷毀,存儲的那些基本值也都被銷毀了

// 堆內(nèi)存:引用值對應(yīng)的空間

????1.存儲引用類型值得(對象:鍵值對 函數(shù):代碼字符串)

????????=》當(dāng)前堆內(nèi)存釋放被銷毀珍坊,那么這個引用值徹底沒了

????????=》堆內(nèi)存得釋放:當(dāng)堆內(nèi)存沒有被任何的變量或者其他東西所占用牺勾,瀏覽器會在空閑的時候,自主的進行內(nèi)存回收,把所有不被占用的堆內(nèi)存銷毀掉(谷歌瀏覽器)

? ? ? ? =》IE瀏覽器(計數(shù)--內(nèi)存泄漏)

????????xxx = null通過空對象指針null可以讓原始變量(或者其他東西)誰都不指向阅悍,那么原有被占用的堆內(nèi)存就沒有被其他東西占用了甲雅,瀏覽器被銷毀它。

### 變量提升

/*

????* 變量提升:

????*? -> 當(dāng)棧內(nèi)存(作用域)形成回还,JS代碼自上而下執(zhí)行之前,瀏覽器首先會把所有的帶“VAR(聲明)”/“function(定義)” 關(guān)鍵字的提前“聲明”或者“定義”叹洲,這種預(yù)先處理機制稱之為“變量提升”

????*

????* -> 聲明(declare): var a / function sum (默認值undefined)

????* -> 定義(defined): a=12 (定義其實就是賦值操作)

????*

????* 【變量提升階段】

? ? *? ? ?=》帶“VAR”的只聲明未定義

????*? ? ?=》帶“FUNCTION”的聲明和賦值都完成了

????*

????* ????=》 變量提升只發(fā)生在當(dāng)前作用域(例如:開始加載頁面的時候只對全局作用域下的進行提升柠硕,因為此時的函數(shù)中存儲的都是字符串而已)

????*

????*? ?=》 在全局作用域下聲明的函數(shù)或者變量是“全局變量”,同理,在私有作用域下聲明的變量是“私有變量”[帶VAR/FUNCTION的才是聲明]

????*

????*? ?=>瀏覽器很懶蝗柔,做過的事情不會重復(fù)執(zhí)行第二遍闻葵,也就是當(dāng)代碼執(zhí)行遇到創(chuàng)建函數(shù)這部分代碼后,直接跳過即可(因為在提升階段就已經(jīng)完成函數(shù)的賦值操作了)

????*

*/

console.log(a);? ? //undefined,說明a已經(jīng)存在

var a = 12;

function sum(){

????var total = null;

????for(var i=0;i<arguments.length;i++){

????????var item = arguments[i];

????????item=paeseFloat(item);

????????isNaN(item) ? total+=item:null;

????}

????return total;

}

console.log(sum(12,23,'34','AA'))

### 帶VAR和不加VAR的區(qū)別

// => 在全局作用域下聲明一個變量癣丧,也相當(dāng)于給WINDOW全局對象設(shè)置了一個屬性槽畔,變量的值就是屬性值(私有作用域中聲明的私有變量和WINDOW沒啥關(guān)系)

console.log(a); //=>undefined

console.log(window.a) // => undefined

console.log('a' in window)??

// =>TRUE 在變量提升階段,在全局作用域中聲明了一個變量A胁编,此時就已經(jīng)把A當(dāng)作屬性賦值給window了厢钧,只不過此時還沒有給A賦值,默認UNDEFINED?嬉橙。in:檢測某個屬性是否隸屬于這個對象

var a = 12;? ? //=》全局屬性修改坏快,window的屬性值也跟著修改

console.log(a); // =>window的一個屬性名A 12

a = 13;

console.log(window.a);? //13

window.a = 14;

console.log(a)? ? ? ? ? //14

// => 全局變量和WINDOW中的屬性存在“映射機制”

### in的操作(判斷某個對象中是否有某個屬性)

var obj = {name:undefined};

obj.name ????????????????????// undefined

obj.age????????????????? ????// undefined

console.log('name' in obj)? // true

console.log('age' in obj) // false

### 不帶VAR

// => 不加VAR的本質(zhì)是WINDOW的屬性,不是變量

console.log(a)? ? ? ? // a is not defined

console.log(window.a) //=>undefined

console.log('a' in window)? //=> false

a = 12; //=>window.a=12? ?a=12相等于window.a=12

console.log(a)? //=>12

console.log(window.a)? //=>12

var a = 12,b = 13;//這樣寫B(tài)是帶VAR的

var a = b = 12;? //這樣寫B(tài)是不帶VAR的


面試題? -- 帶VAR和不帶VAR的

console.log(a,b)? // undefined? undefined

var a = 12,

b = 12;

function fn(){

????console.log(a,b)? //undefined,12

????/*

? ? ? ?* 私有作用域中daiVAR和不帶VAR也有區(qū)別

? ? ? ?* 私有作用域下帶VAR的是私有變量,帶VAR的私有作用域變量提升階段憎夷,都聲明為私有變量莽鸿,和外界沒有關(guān)系

? ? ? ?* 不帶VAR的不是私有變量,會向它的上級作用域查找拾给,看是否為上級變量祥得,不是,繼續(xù)向上查找蒋得,一直找到window為止(我們把這種查找機制叫做:“作用域鏈”)级及,也就是我們在私有作用域中操作的這個非私有變量,是一直操作別人的额衙。

? ? ? ? */

? ? ? ?var a = b =13; //(b不是私有變量的? ?/* var a = 13;b = 13; */

????????console.log(a,b)? //13,13

}

fn();

console.log(a,b)? ? // 12,13

面試題 -- 在私有作用域中 b = 13饮焦,輸出

function fn(){

????/*

????* 變量提升

????*/

????console.log(b) //: b is not defined

????b = 13;

????console.log('b' in window);? //=>true 在作用域鏈中查找的過程中,如果找到window也沒有這個變量窍侧,相當(dāng)于給window設(shè)置了一個屬性B

????console.log(b); // =》 13

}

fn();

console.log(b);? // =>13

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末县踢,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子伟件,更是在濱河造成了極大的恐慌硼啤,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件斧账,死亡現(xiàn)場離奇詭異谴返,居然都是意外死亡,警方通過查閱死者的電腦和手機咧织,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門嗓袱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人习绢,你說我怎么就攤上這事渠抹。” “怎么了?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵逼肯,是天一觀的道長。 經(jīng)常有香客問我桃煎,道長篮幢,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任为迈,我火速辦了婚禮三椿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘葫辐。我一直安慰自己搜锰,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布耿战。 她就那樣靜靜地躺著蛋叼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪剂陡。 梳的紋絲不亂的頭發(fā)上狈涮,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天,我揣著相機與錄音鸭栖,去河邊找鬼歌馍。 笑死,一個胖子當(dāng)著我的面吹牛晕鹊,可吹牛的內(nèi)容都是我干的松却。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼溅话,長吁一口氣:“原來是場噩夢啊……” “哼晓锻!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起飞几,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤带射,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后循狰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體窟社,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年绪钥,在試婚紗的時候發(fā)現(xiàn)自己被綠了灿里。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡程腹,死狀恐怖匣吊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤色鸳,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布社痛,位于F島的核電站,受9級特大地震影響命雀,放射性物質(zhì)發(fā)生泄漏蒜哀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一吏砂、第九天 我趴在偏房一處隱蔽的房頂上張望撵儿。 院中可真熱鬧,春花似錦狐血、人聲如沸淀歇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽浪默。三九已至,卻和暖如春缀匕,著一層夾襖步出監(jiān)牢的瞬間浴鸿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工弦追, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留岳链,地道東北人。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓劲件,卻偏偏與公主長得像掸哑,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子零远,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,871評論 2 354

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