js的執行過程

其實這個執行過程很簡單,但是爲啥我還有寫在博客裏面呢,主要是爲了找個地方做筆記,哈哈,生活在於開源,其實開放思想,share自己的想法也可以認爲是開源。
好了,言歸正傳
當我們寫好一個js文件後,想要成功的看到他的運行結果,這期間,經歷了兩個過程,這兩個過程分別是預編譯期和執行期,預編譯期,做了什麼事兒呢,對於變量來說,預編譯期,會對帶有 var 申明的變量進行一個初始化的過程,這裏初始化是沒有賦值的過程的哦,僅僅只是初始化,只有到了執行期,纔會對這個變量進行賦值操作。那麼對於函數來說呢,情況是這樣的,在預編譯期,實際上就已經對函數進行了定義,也就是已經把函數的定義加載到了內存中,當運行的時候,就可以直接調用,所以說,不管函數的調用是發生在函數定義之前還是之後,都可以正常運行,不會出現undefined的錯誤。下面我用代碼來說明一下:

function fun() {

    console.log("name=" + name);
    var name = "carl";
    console.log("name=" + name);
}
fun();

這段代碼的運行結果是什麼?
name=undefined
name=carl
那如果代碼改稱這樣呢

function fun() {

    console.log("name=" + name);
    name = "carl";
    console.log("name=" + name);
}
fun();

結果又會是什麼樣的呢?
結果是
name=carl
name=carl,這是爲什麼呢,因爲我們對name沒有用var來申明,那麼這個時候,這個name實際上是一個全局的屬性,我們知道js裏面屬性是先於函數編譯的,所以,當運行到函數的時候,name已經有了定義,並且進行了賦值,因爲他是全局變量。

發佈了44 篇原創文章 · 獲贊 4 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章