JavaScript預(yù)解析之變量預(yù)解析和函數(shù)預(yù)解析
首先了解預(yù)解析之前先看兩個(gè)問題
1.大家思考下 這個(gè)結(jié)果會(huì)是多少呢?
console.log(num); var num=10;
結(jié)果是 undefined
2.這個(gè)輸出結(jié)果又會(huì)是多少呢?
fun(); var fun=function(){ console.log(22); }
顯然這個(gè)結(jié)果報(bào)錯(cuò)了。
那究竟為什么會(huì)這樣執(zhí)行呢?
1、我們js引擎運(yùn)行js分為兩步: 預(yù)解析 代碼執(zhí)行
- 預(yù)解析 js引擎會(huì)把js里面所有的var還有function提升到當(dāng)前作用域的最前面
- 代碼執(zhí)行 按照代碼書寫的順序從上往下執(zhí)行
2、預(yù)解析分為 變量預(yù)解析(變量提升)和 函數(shù)預(yù)解析(函數(shù)提升)
- 變量提升 就是把所有的變量聲明提升到當(dāng)前作用域最前面 不提升賦值操作
- 函數(shù)提升 就是把所有函數(shù)聲明提升到當(dāng)前作用域的最前面 不調(diào)用函數(shù)
那我們第一個(gè)問題就相當(dāng)于執(zhí)行了以下代碼
var num; console.log(num); num=10;
第二個(gè)問題相當(dāng)于執(zhí)行了以下代碼
var fun; fun(); fun=funciton(){ console.log(22); }
這下我們就可以看到 聲明了一個(gè)變量 但是沒有給值,接著又調(diào)用了fun()這個(gè)函數(shù),但是沒有這個(gè)函數(shù),肯定會(huì)報(bào)錯(cuò)。
所以函數(shù)表達(dá)式調(diào)用必須要寫在函數(shù)表達(dá)式聲明的下面才可以。
相關(guān)文章
node.js入門教程迷你書、node.js入門web應(yīng)用開發(fā)完全示例
本書致力于教會(huì)你如何用Node.js來(lái)開發(fā)應(yīng)用,過程中會(huì)傳授你所有所需的“高級(jí)”JavaScript知識(shí)。本書絕不是一本“Hello World”的教程。2014-04-04一個(gè)簡(jiǎn)單的網(wǎng)站訪問JS計(jì)數(shù)器 刷新1次加1次訪問
一個(gè)簡(jiǎn)單的網(wǎng)站訪問JS計(jì)數(shù)器,一般就是學(xué)習(xí)下原來(lái),不建議使用,現(xiàn)在cnzz或百度統(tǒng)計(jì)多試不錯(cuò)的2012-09-09JavaScript代碼優(yōu)雅,簡(jiǎn)潔的編寫技巧總結(jié)
專業(yè)開發(fā)人員將為未來(lái)的自己和“其他人”編寫代碼,而不僅僅只編寫當(dāng)前能工作就行的代碼。在此基礎(chǔ)上,簡(jiǎn)潔代碼可以定義為自解釋的、易于人理解的、易于更改或擴(kuò)展的代碼。以下列表一些好編寫方式,僅供參考2022-10-10優(yōu)化JavaScript腳本的性能的幾個(gè)注意事項(xiàng)
優(yōu)化JavaScript腳本的性能的幾個(gè)注意事項(xiàng)...2006-12-12