光明頂開課了 JAVAscript 第一課(預(yù)解釋)

作者 混元霹靂手-Ziksang

本文章將是一套系列課程撞蜂,偏進(jìn)階,面向有JAVAscript基礎(chǔ)的讀者,文章以精簡(jiǎn)侥袜、通俗意通為主要講解方式蝌诡,全方位的帶你進(jìn)入JAVAscript集中知識(shí)點(diǎn)學(xué)習(xí),讓零散的知識(shí)點(diǎn)一步一步的聚攏枫吧,希望大家有所收獲浦旱!

我們先回顧一下js中的數(shù)據(jù)類型有那些?

一.基本數(shù)據(jù)類型
1.number
2.string
3.boolean
4.null
5.undefined
二.引用數(shù)據(jù)類型
1.object ---- {}對(duì)象 ---- []數(shù)組 ---- /^$/正則 ---- Date時(shí)間
2.function

基本數(shù)據(jù)類型和引用數(shù)據(jù)類型區(qū)別在于什么地方九杂?

1.基本數(shù)據(jù)類型:是按照值來操作的
2.引用數(shù)據(jù)類型:是按照引用地址來操作的

看個(gè)demo例子

var name = 'ziksang'
var obj = {name : '混元霹靂手', age : "23" }
function demo () {
    console.log('光明頂開課了')
}

1.當(dāng)HTML加載頁(yè)面的時(shí)候颁湖,提供了一個(gè)全局js代碼執(zhí)行的環(huán)境 ---- 全局作用域
在node環(huán)境下(global)
在瀏覽器下 (window)

下圖會(huì)詳細(xì)解釋 以上代碼的在全局作用預(yù)解釋的執(zhí)行流程

如果我們此時(shí)把obj.name = '預(yù)解釋',此時(shí)內(nèi)部是進(jìn)行了一個(gè)如何的操作?
1.因?yàn)?code>obj對(duì)象是一個(gè)引用類型,所以把全局作用域下的obj對(duì)象 通過xxxfff000地址找到所指向的開辟的內(nèi)存空間例隆,然后把內(nèi)空間中的name屬性改成‘預(yù)解釋’

如果我們執(zhí)行console.log(demo),此時(shí)內(nèi)部是進(jìn)行了一個(gè)如何的操作甥捺?
1.因?yàn)?code>demo是一個(gè)function,也是一個(gè)引用類型,此時(shí)會(huì)通過xxxfff111地址找到所指向的開辟的內(nèi)存空間裳擎,里面存儲(chǔ)的是一個(gè)轉(zhuǎn)成字符串的demo函數(shù)體的整體代碼段,此時(shí)就會(huì)把整個(gè)函數(shù)整體代碼段輸出出來 //function demo(){console.log('光明頂開課了')}

如果我們執(zhí)行console.log(demo()),此時(shí)內(nèi)部是進(jìn)行了一個(gè)如何操作涎永?
1.因?yàn)榇藭r(shí)是demo()思币,函數(shù)通過一個(gè)()括號(hào)鹿响,還是會(huì)通過xxxfff111地址找到所指向的開辟的內(nèi)存空間羡微,里面存儲(chǔ)的是一個(gè)demo函數(shù)體的整體代碼段,此時(shí)會(huì)執(zhí)行里面的代碼段惶我,進(jìn)行兩部操作妈倔,第一是執(zhí)行代碼段中的代碼運(yùn)行程序,會(huì)打印出'光明頂開課了',二會(huì)返回一個(gè)值,返回結(jié)果是通過函數(shù)代碼段中return后的結(jié)果绸贡,如果沒有return則默認(rèn)返回undefined

預(yù)解釋

在當(dāng)前的作用域中盯蝴,js代碼執(zhí)行之前瀏覽器首先會(huì)默認(rèn)的把所有帶var,let,const的操作符和function進(jìn)行提前的聲明或者定義

一.理解聲明和定義 【聲明】declare 【定義】defined

先看 var name = 'ziksang'看看瀏覽器引擎給它做了那些預(yù)解釋

在預(yù)解釋中是分為兩大部分完成的,一部分是聲明听怕,一部分是定義
1.聲明 (代表將要在全局環(huán)境下要聲明一些標(biāo)識(shí)符捧挺,這些將通過你的代碼來解析) 告訴瀏覽器在全局環(huán)境下通過操作符聲明一個(gè) name標(biāo)識(shí)符(變量)
2.定義 (代表就是給全局環(huán)境下聲名出來的標(biāo)識(shí)符(變量)進(jìn)行定義基本類型引用類型的值name='ziksang'name變量定義了一個(gè)string基本類型的值

預(yù)解釋的定義

是瀏覽器引擎的一種機(jī)制,在當(dāng)前的作用域當(dāng)中尿瞭,代碼執(zhí)行之前闽烙,瀏覽器分默認(rèn)把帶標(biāo)識(shí)符或者function關(guān)鍵字的進(jìn)行提前的聲明和定義。

二.對(duì)于標(biāo)識(shí)符var 和 function關(guān)鍵字在預(yù)解釋時(shí)的區(qū)別之處

此時(shí)我就可以延伸出一個(gè)面試題 請(qǐng)問題1題2分別打印出什么声搁,請(qǐng)說出原理黑竞!

題1

    function demo(){
        console.log(1)
    }
    var demo = function(){
        console.log(2)
    }
    demo()

題2

   var demo = function(){
        console.log(2)
    }
    function demo(){
        console.log(1)
    }
    demo()

題1打印出的是2,題2打印出的還是2....為什么呢疏旨?
首先我們先看看標(biāo)識(shí)符var 和 function關(guān)鍵字在預(yù)解釋時(shí)的區(qū)別之處
在預(yù)解釋過程中很魂,標(biāo)識(shí)符先聲明再定義,而function關(guān)鍵字是聲明定義一起完成

先看執(zhí)行過程的瀏覽器解析和內(nèi)存空間分配圖
再看看瀏覽器預(yù)解釋過程分析和內(nèi)存空間分配圖

從上面兩個(gè)制圖我們可以找到原理檐涝,函數(shù)表達(dá)式用的是標(biāo)識(shí)符聲明的遏匆,預(yù)解釋層的第一層聲明層只是對(duì)操作符demo變量進(jìn)行聲明,而函數(shù)聲明function demo在聲明層不但聲明而且還進(jìn)行了定義谁榜,導(dǎo)致在定義層的的時(shí)候拉岁,函數(shù)表達(dá)式覆蓋了函數(shù)聲明,所以題1題2都打印出來是2

三.預(yù)解釋導(dǎo)致變量提升

這些問題也很能考成一個(gè)面試題惰爬,還是對(duì)預(yù)解釋的理解

console.log(name)
var name = 'ziksang'
console.log(name)
demo()
function demo(){
   console.log('光明頂開課啦')
}
看看執(zhí)行預(yù)解釋流程圖

首先預(yù)解釋喊暖,先不執(zhí)行里面的代碼,提前先解析的是聲明層撕瞧,把用標(biāo)識(shí)符和function關(guān)鍵字聲明的變量或者函數(shù)聲明先提前解析聲明

此時(shí)name先進(jìn)入聲明層陵叽,先聲明一個(gè)var name,再聲明一個(gè)function demo,同時(shí)函數(shù)聲明在聲明層同時(shí)進(jìn)行了定義丛版,那就是把整個(gè)function demo(){console.log(‘光明頂開課了’)}提到了代碼最頂層的解釋層的聲明層里巩掺,此時(shí)從上往下執(zhí)行代碼,第一個(gè)執(zhí)行到console.log(name)页畦,因?yàn)閚ame只是進(jìn)行了變量提升到了解釋層的聲明層并沒有定義胖替,如果沒有定義則就是undefined;代碼再往下走,name進(jìn)行了定義直接進(jìn)入了定義層,name定義為'ziksang'独令,此時(shí)再執(zhí)行到console.log(name),則返回‘ziksang’,代碼往下走端朵,執(zhí)行到demo()的時(shí)候,函數(shù)聲明已經(jīng)提到了解釋層的聲明層并且進(jìn)行了定義燃箭,所以執(zhí)行demo()并不會(huì)報(bào)錯(cuò)冲呢,而且會(huì)返回'光明頂開課啦'

總結(jié),這里講解了對(duì)瀏覽器預(yù)解釋的認(rèn)識(shí)招狸,并且通過預(yù)解釋認(rèn)識(shí)到變量提升的原因敬拓,對(duì)標(biāo)識(shí)符和function聲明的函數(shù)的區(qū)別有了一定的認(rèn)識(shí),更加深入的了解了聲明和定義的一個(gè)生命周期

沒有經(jīng)過本人同意不得轉(zhuǎn)載裙戏,如果經(jīng)過本人同意轉(zhuǎn)載后請(qǐng)標(biāo)注出自@混元霹靂手-ziksang

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末乘凸,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子累榜,更是在濱河造成了極大的恐慌翰意,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件信柿,死亡現(xiàn)場(chǎng)離奇詭異冀偶,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)渔嚷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門进鸠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人形病,你說我怎么就攤上這事客年。” “怎么了漠吻?”我有些...
    開封第一講書人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵量瓜,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我途乃,道長(zhǎng)绍傲,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任耍共,我火速辦了婚禮烫饼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘试读。我一直安慰自己杠纵,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開白布钩骇。 她就那樣靜靜地躺著比藻,像睡著了一般铝量。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上银亲,一...
    開封第一講書人閱讀 51,737評(píng)論 1 305
  • 那天慢叨,我揣著相機(jī)與錄音,去河邊找鬼群凶。 笑死插爹,一個(gè)胖子當(dāng)著我的面吹牛哄辣,可吹牛的內(nèi)容都是我干的请梢。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼力穗,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼毅弧!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起当窗,我...
    開封第一講書人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤够坐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后崖面,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體元咙,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年巫员,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了庶香。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡简识,死狀恐怖赶掖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情七扰,我是刑警寧澤奢赂,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站颈走,受9級(jí)特大地震影響膳灶,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜立由,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一袖瞻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧拆吆,春花似錦聋迎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)庭再。三九已至,卻和暖如春牺堰,著一層夾襖步出監(jiān)牢的瞬間拄轻,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工伟葫, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留恨搓,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓筏养,卻偏偏與公主長(zhǎng)得像斧抱,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子渐溶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,185評(píng)論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理辉浦,服務(wù)發(fā)現(xiàn),斷路器茎辐,智...
    卡卡羅2017閱讀 134,672評(píng)論 18 139
  • 生活從來沒有鄙薄我 一波風(fēng)浪 一次成長(zhǎng) 有人喜歡你的美麗 那是一掛深刻的水墨丹青 有人喜歡你的善良 那是你所經(jīng)歷的...
    藍(lán)色的海sunshine閱讀 390評(píng)論 0 0
  • 3月5日網(wǎng)上流傳著一段北京地鐵上暴力事件的視頻,視頻內(nèi)容是一名年輕男子與兩位“創(chuàng)業(yè)掃碼”的女士發(fā)生沖突依啰,男子在爭(zhēng)執(zhí)...
    海深不藍(lán)心閱讀 772評(píng)論 0 3
  • 鏡中曾幾亦青春乎串,今日照來霜發(fā)新。 誰使少年常笑我孔飒,只緣長(zhǎng)者總憐人灌闺。 辛勤不解當(dāng)時(shí)意,刻苦方知現(xiàn)在身坏瞄。 去處能無詩(shī)夢(mèng)...
    雪窗_武立之閱讀 163評(píng)論 3 2