日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

js解析顺序了解一下??

發(fā)布時間:2025/3/20 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 js解析顺序了解一下?? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

我們在學(xué)習(xí)一種新事物的時候,總是知其然,而不知其所然。有些人會探究到底,有一些人會得過且過。

好了,開場白結(jié)束,直接進入正題。

js不像C語言那樣只要編譯一次之后成.exe文件之后就不用在編譯可以直接使用了,js是一種解釋型語言,就像你出國旅游,有一個人為你翻譯別人的

話一樣,別人說一句,你的翻譯就翻譯一句。js同理 是邊解析邊執(zhí)行。

js的解析分為兩個階段? ? 1.預(yù)解析階段 2.執(zhí)行階段

?

1.預(yù)解析階段

? 其實js執(zhí)行代碼的時候都i是在執(zhí)行一個作用域,而js一共就只有兩個作用域,全局作用域和函數(shù)作用域

? 在我們打開程序的一瞬間,全局作用域里面的代碼就執(zhí)行了,這個時候是和函數(shù)作用域雞毛關(guān)系都沒有

? 那么與解析階段都干啥了?

?這個階段主要做的事 就是變量收集 也可以說聲明提前,用代碼表達更好的解釋

test();//帥哥天下9var a=4;var b=function(){console.log("帥氣喆");}function test(){console.log("帥哥天下9");}

為什么test方法能執(zhí)行呢,先執(zhí)行后定義,還有這種操作??

其實這就得歸公于與解析階段了

他會把變量聲明提前這個變量包括普通變量和函數(shù)變量

var a=function(){

//code? ? ? ? ? ? ?這個是函數(shù)表達式 并不是函數(shù)聲明!!!

}

所以上面的代碼應(yīng)該是這樣子滴

var a; var b; function test(){ console.log("帥哥天下9"); } test(); a=4; b=function(){console.log("帥氣喆"); };

所以這就解釋了為什么可以先調(diào)用后定義了吧;

再舉個例子

function test1(){console.log(a); //undefined var a=4; } test1();

輸出結(jié)果是 undefined 而沒有報錯 這就說明 在使用前已經(jīng)聲明了 但是在調(diào)用之前沒有賦值而已嘍

其實是這樣的

function test1(){ var a;console.log(a);a=4; } test1();

現(xiàn)在理解了嗎?

執(zhí)行階段

執(zhí)行階段這一塊,就是說 變量賦值啦 函數(shù)執(zhí)行啦都在這個階段,從上而下很好理解

就是順序就是? :

?

?用一段代碼來解釋吧

var a="boy"; var b="girl"; function test(){var c="手牽手" console.log(c); } test(); console.log("結(jié)束了");/* 全局預(yù)解析階段 變量收集 var a; var b; function test(){var c="手牽手" console.log(c); }a="boy"; b="girl"; test();從這到函數(shù)預(yù)解析階段 var c; 函數(shù)執(zhí)行階段 c="手牽手" console.log(c); 再回到全局執(zhí)行階段 執(zhí)行console.log("結(jié)束了"); 結(jié)束!! */

看到這里的朋友都能差不多懂了吧!

?

轉(zhuǎn)載于:https://www.cnblogs.com/liveoutfun/p/8808948.html

總結(jié)

以上是生活随笔為你收集整理的js解析顺序了解一下??的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。