js解析顺序了解一下??
我們在學習一種新事物的時候,總是知其然,而不知其所然。有些人會探究到底,有一些人會得過且過。
好了,開場白結束,直接進入正題。
js不像C語言那樣只要編譯一次之后成.exe文件之后就不用在編譯可以直接使用了,js是一種解釋型語言,就像你出國旅游,有一個人為你翻譯別人的
話一樣,別人說一句,你的翻譯就翻譯一句。js同理 是邊解析邊執行。
js的解析分為兩個階段? ? 1.預解析階段 2.執行階段
?
1.預解析階段
? 其實js執行代碼的時候都i是在執行一個作用域,而js一共就只有兩個作用域,全局作用域和函數作用域
? 在我們打開程序的一瞬間,全局作用域里面的代碼就執行了,這個時候是和函數作用域雞毛關系都沒有
? 那么與解析階段都干啥了?
?這個階段主要做的事 就是變量收集 也可以說聲明提前,用代碼表達更好的解釋
test();//帥哥天下9var a=4;var b=function(){console.log("帥氣喆");}function test(){console.log("帥哥天下9");}為什么test方法能執行呢,先執行后定義,還有這種操作??
其實這就得歸公于與解析階段了
他會把變量聲明提前這個變量包括普通變量和函數變量
var a=function(){
//code? ? ? ? ? ? ?這個是函數表達式 并不是函數聲明!!!
}
所以上面的代碼應該是這樣子滴
var a; var b; function test(){ console.log("帥哥天下9"); } test(); a=4; b=function(){console.log("帥氣喆"); };所以這就解釋了為什么可以先調用后定義了吧;
再舉個例子
function test1(){console.log(a); //undefined var a=4; } test1();輸出結果是 undefined 而沒有報錯 這就說明 在使用前已經聲明了 但是在調用之前沒有賦值而已嘍
其實是這樣的
function test1(){ var a;console.log(a);a=4; } test1();現在理解了嗎?
執行階段
執行階段這一塊,就是說 變量賦值啦 函數執行啦都在這個階段,從上而下很好理解
就是順序就是? :
?
?用一段代碼來解釋吧
var a="boy"; var b="girl"; function test(){var c="手牽手" console.log(c); } test(); console.log("結束了");/* 全局預解析階段 變量收集 var a; var b; function test(){var c="手牽手" console.log(c); }a="boy"; b="girl"; test();從這到函數預解析階段 var c; 函數執行階段 c="手牽手" console.log(c); 再回到全局執行階段 執行console.log("結束了"); 結束!! */看到這里的朋友都能差不多懂了吧!
?
轉載于:https://www.cnblogs.com/liveoutfun/p/8808948.html
總結
以上是生活随笔為你收集整理的js解析顺序了解一下??的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Lua】LuaForWindows_v
- 下一篇: bzoj3224: Tyvj 1728