我們在學習一種新事物的時候,總是知其然,而不知其所然。有些人會**到底,有一些人會得過且過。
好了,開場白結束,直接進入正題。
js不像c語言那樣只要編譯一次之後成.exe檔案之後就不用在編譯可以直接使用了,js是一種解釋型語言,就像你出國旅遊,有乙個人為你翻譯別人的
話一樣,別人說一句,你的翻譯就翻譯一句。js同理 是邊解析邊執行。
js的解析分為兩個階段
1.預解析階段 2.執行階段
1.預解析階段
其實js執行**的時候都i是在執行乙個作用域,而js一共就只有兩個作用域,全域性作用域和函式作用域
在我們開啟程式的一瞬間,全域性作用域裡面的**就執行了,這個時候是和函式作用域雞毛關係都沒有
那麼與解析階段都幹啥了?
這個階段主要做的事 就是變數收集 也可以說宣告提前,用**表達更好的解釋
test();//為什麼test方法能執行呢,先執行後定義,還有這種操作??帥哥天下9
var a=4;
var b=function()
function
test()
其實這就得歸公於與解析階段了
他會把變數宣告提前這個變數包括普通變數和函式變數
var a=function()
所以上面的**應該是這樣子滴
var所以這就解釋了為什麼可以先呼叫後定義了吧;a;var
b;function
test()
test();
a=4;
b=function
();
再舉個例子
function輸出結果是 undefined 而沒有報錯 這就說明 在使用前已經宣告了 但是在呼叫之前沒有賦值而已嘍test1()
test1();
其實是這樣的
function現在理解了嗎?test1()
test1();
執行階段
執行階段這一塊,就是說 變數賦值啦 函式執行啦都在這個階段,從上而下很好理解
就是順序就是 :
用一段**來解釋吧
var a="boy";看到這裡的朋友都能差不多懂了吧!var b="girl";
function
test()
test();
console.log("結束了");
/*全域性預解析階段
變數收集
var a;
var b;
function test()
a="boy";
b="girl";
test();從這到函式預解析階段
var c;
函式執行階段
c="手牽手"
console.log(c);
再回到全域性執行階段
執行console.log("結束了");
結束!!
*/
JS事件迴圈,了解一下
在理解事件迴圈之前,我總會遇到一些奇奇怪怪的問題 比如明明已經調介面拿到了資料,可是跟在調資料之後的操作卻沒有正常執行 又或者不知道為啥,裡非得加個settimeout才能正常跑通 特別是在運用promise的時候,更是有各種問題百思不得解。遇上問題要解決,更要知道問題產生的原因,這樣才能hold住...
了解一下NTLM
ntlm 在客戶機與伺服器之間提供身份認證的安全包。ntlm 身份驗證協議 是 質詢 應答身份驗證協議,是windows nt 4.0 及其早期版本中用於網路身份驗證的預設協議。windows 2000 中仍然支援該協議,但它不再是預設的。ntlm身份驗證過程 ntlm 是用於 windows nt...
了解一下 display flex
一 display flex flex 是flexuble box的縮寫,意為 彈性盒子 用來為盒狀模型提供最大的靈活性.任何乙個容器都可以指定為flex布局.box 行內元素也可以使用flex布局.box webkit核心的瀏覽器,必須加上 webkit box 注意為父級設計flex布局以後,子...