JavaScript預(yù)解析之變量預(yù)解析和函數(shù)預(yù)解析
首先了解預(yù)解析之前先看兩個問題
1.大家思考下 這個結(jié)果會是多少呢?
console.log(num); var num=10;
結(jié)果是 undefined
2.這個輸出結(jié)果又會是多少呢?
fun();
var fun=function(){
console.log(22);
}顯然這個結(jié)果報錯了。
那究竟為什么會這樣執(zhí)行呢?
1、我們js引擎運行js分為兩步: 預(yù)解析 代碼執(zhí)行
- 預(yù)解析 js引擎會把js里面所有的var還有function提升到當前作用域的最前面
- 代碼執(zhí)行 按照代碼書寫的順序從上往下執(zhí)行
2、預(yù)解析分為 變量預(yù)解析(變量提升)和 函數(shù)預(yù)解析(函數(shù)提升)
- 變量提升 就是把所有的變量聲明提升到當前作用域最前面 不提升賦值操作
- 函數(shù)提升 就是把所有函數(shù)聲明提升到當前作用域的最前面 不調(diào)用函數(shù)
那我們第一個問題就相當于執(zhí)行了以下代碼
var num; console.log(num); num=10;
第二個問題相當于執(zhí)行了以下代碼
var fun;
fun();
fun=funciton(){
console.log(22);
}這下我們就可以看到 聲明了一個變量 但是沒有給值,接著又調(diào)用了fun()這個函數(shù),但是沒有這個函數(shù),肯定會報錯。
所以函數(shù)表達式調(diào)用必須要寫在函數(shù)表達式聲明的下面才可以。
相關(guān)文章
JavaScript常用字符串與數(shù)組擴展函數(shù)小結(jié)
這篇文章主要介紹了一些JavaScript常用字符串與數(shù)組擴展函數(shù),整理了一些簡單而使用率又高的操作String與Array的函數(shù),需要的朋友可以參考下2016-04-04
Web面試常問回流reflow與重繪repaint原理及區(qū)別
本文主要為大家講解了瀏覽器的渲染機制回流與重繪的原理,有需要的朋友可以借鑒參考下,希望可以有所幫助,祝大家多多進步早日升職加薪2021-09-09
深入理解JavaScript系列(43):設(shè)計模式之狀態(tài)模式詳解
這篇文章主要介紹了深入理解JavaScript系列(43):設(shè)計模式之狀態(tài)模式詳解,狀態(tài)模式(State)允許一個對象在其內(nèi)部狀態(tài)改變的時候改變它的行為,對象看起來似乎修改了它的類,需要的朋友可以參考下2015-03-03
JavaScript中函數(shù)的常用寫法及調(diào)用方法
這篇文章介紹了JavaScript中函數(shù)的常用寫法及調(diào)用方法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-06-06
分享我學(xué)習(xí)js的過程 作者aircy javascript學(xué)習(xí)教程
分享我學(xué)習(xí)js的過程 作者aircy javascript學(xué)習(xí)教程...2007-02-02
JavaScript前端圖片加載管理器imagepool使用詳解
這篇文章主要介紹了JavaScript前端圖片加載管理器imagepool使用詳解,需要的朋友可以參考下2014-12-12
javascript學(xué)習(xí)筆記(二)數(shù)組和對象部分
本文是學(xué)習(xí)筆記系列的第二篇,深入淺出的分別從javascript對象和數(shù)組兩個部分介紹了相關(guān)知識,并附上詳細示例,非常的實用,有需要的朋友可以參考下2014-09-09

