摘要:之前經(jīng)常會聽到預(yù)解釋,預(yù)解釋,那么預(yù)解釋到底是什么今天就來淺談一下下。所以預(yù)解釋是只發(fā)生在當前作用域下的,只有函數(shù)執(zhí)行的時候函數(shù)中的才會預(yù)解釋。而是在預(yù)解釋的時候,既要聲明又要定義,所以是有值的。
之前經(jīng)常會聽到預(yù)解釋,預(yù)解釋,那么預(yù)解釋到底是什么?今天就來淺談一下下。
預(yù)解釋也是我們平時說的變量提聲,在當前作用域中js代碼執(zhí)行之前,瀏覽器首先會默認的把所有的帶var和function的進行提前的聲明或者定義,這個就可以叫做預(yù)解釋。
那什么叫做聲明,什么又叫做定義喃?
聲明:比如
var test
那這個就是在告訴瀏覽器我們在全局作用域中聲明了一個叫test的變量
定義:比如
test=2
給我們聲明的變量進行賦值
那對于帶var 和function關(guān)鍵字的,在預(yù)解釋中,他們也是不一樣的。帶var 的在預(yù)解釋中只是提前的聲明,而function在預(yù)解釋中既要聲明,還要定義,這也就是為什么上面我們說 “ 提前聲明或定義 ”
舉個例子
var test = 2 var obj = {"name":"代碼"} function foo (val) { var test2 = val console.log(test2) }
以上代碼在全局作用域中從上往下執(zhí)行的時候預(yù)解釋,首先聲明一個 test,聲明一個obj,再聲明和定義一個foo。那么在foo里面的 var test2在全局作用域下會預(yù)解釋嗎?當然是不行的, 上面我們也說過了“ 在當前作用域中js執(zhí)行 ”test2在foo的作用域中,只有當foo執(zhí)行的時候才會預(yù)解釋。所以預(yù)解釋是只發(fā)生在當前作用域下的,只有函數(shù)執(zhí)行的時候函數(shù)中的才會預(yù)解釋。
所以我們可能出去面試的時候就會遇到一些這樣的問題
console.log(test ) foo(5) var test = 2 console.log(test ) var obj = {"name":"代碼"} function foo (val) { var test2 = val console.log(test2) }
那么打印出來的內(nèi)容是什么喃?
console.log(test )//undefined foo(5)//5 var test = 2 console.log(test )//2 var obj = {"name":"代碼"} function foo (val) { var test2 = val console.log(test2) }
因為剛開始的時候只是對test做了聲明,但是沒有對它進行定義,所以第一次console是undefind,但是后來到了第二次console的時候,已經(jīng)把2賦值給了test,所以第二個console是有值的。而foo是function,在預(yù)解釋的時候,既要聲明又要定義,所以foo(5)是有值的。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/108458.html
摘要:一概念是一個單線程解釋型的編程語言。預(yù)編譯大致可分為步創(chuàng)建對象找形參和變量聲明,將形參和變量名作為屬性名,值為將實參值和形參統(tǒng)一在函數(shù)體里面找函數(shù)聲明,值賦予函數(shù)體。 一、JavaScript概念 JavaScript ( JS ) 是一個單線程、解釋型的編程語言。 二、JavaScript語言特點 2.1 單線程 JavaScript語言的一大特點就是單線程,也就是說,同一個時間只能...
摘要:圖片的預(yù)加載是提升用戶體驗而損失性能的一種做法,而懶加載的性能就比較好了,所以將兩個結(jié)合起來放到程序中是一種不錯的選擇。 最近在做H5滑頁時,遇到一些比較大的場景,動輒二十、三十頁,而圖片更是可恨的能達到上百個,所以就會導(dǎo)致場景在加載的時候遇到網(wǎng)速比較慢的時候,用戶等待的時間特別長,這樣的話,就有可能導(dǎo)致一部分的用戶沒有耐心,而丟失這部分用戶,于是就有了這里的圖片的預(yù)加載和懶加載,記個...
摘要:預(yù)編譯發(fā)生在函數(shù)執(zhí)行前也就是說函數(shù)執(zhí)行時,預(yù)編譯已經(jīng)結(jié)束。五總結(jié)理解預(yù)編譯需要明白變量函數(shù)聲明和變量賦值。預(yù)編譯階段,只進行變量函數(shù)聲明,不會進行變量的初始化即變量賦值,所有變量的值都是變量賦值是在解釋執(zhí)行階段才進行的。 一、JS的概念 JavaScript ( JS ) 是一種具有函數(shù)優(yōu)先的輕量級解釋型或即時編譯型的編程語言。 二、JS語言特點 2.1 單線程 (1)JavaScri...
摘要:我綁定的事件無效。狀況總結(jié)動態(tài)元素綁定用,靜態(tài)元素綁定兩者都可以,為了代碼的統(tǒng)一還是都用吧,切記,可以篩選元素哦 狀況之外 在之前的公司并沒有遇到這個問題,也就沒有深究。直到自己換了現(xiàn)在的公司,剛來第二天就開始寫別人寫到一半的項目,很無奈,不是原生就是jquery,由于項目急,已經(jīng)來不及切換框架重新布局,只能繼續(xù)了。 狀況之中 到處都是列表,到處都是js創(chuàng)建的動態(tài)頁面,好吧,那我也繼續(xù)...
摘要:預(yù)解釋基礎(chǔ)知識先介紹的基本數(shù)據(jù)類型基本數(shù)據(jù)類型值操作有引用數(shù)據(jù)類型引用地址執(zhí)行環(huán)境當瀏覽器加載頁面的時候,首先會提供一個供全局代碼執(zhí)行的環(huán)境全局作用域如下代碼是在中好好學(xué)習天天向上把整個函數(shù)定義的部分函數(shù)本身在控制臺輸出 預(yù)解釋 1. JS基礎(chǔ)知識 1.1 先介紹js的基本數(shù)據(jù)類型 基本數(shù)據(jù)類型 --- 值操作 有number、string、boolean、null、undefine...
閱讀 2797·2021-09-23 11:44
閱讀 1684·2021-09-13 10:24
閱讀 2634·2021-09-08 09:36
閱讀 1241·2019-08-30 15:54
閱讀 2262·2019-08-30 13:54
閱讀 3323·2019-08-30 10:57
閱讀 1859·2019-08-29 18:43
閱讀 3627·2019-08-29 15:10