程序中的一段源代碼在執行以前會經歷三個步驟:分詞/詞法分析,解析/語法分析,代碼生成,統稱爲「編譯」。編程
簡單說,就是有某種方法能夠將var a = 2;的AST轉化爲一組機器指令,用來建立一個叫作a的變量(包括分配內存等),並將一個值儲存在a中。瀏覽器
總結:變量的賦值操做會執行兩個動做,首先編譯器會在當前做用域中聲明一個變量(若是以前沒有聲明過),而後在運行時引擎會在做用域中查找該變量,若是可以找到就會對它賦值。bash
引擎在做用域協助下的查詢變量操做編程語言
查找並取值是RHSide
console.log(a)
複製代碼
查找並賦值是LHSui
a = 2;
複製代碼
function foo(a){ // a = 2
var b = a; // b = , = a
return a + b; // a ,b
}
var c = foo(2) // c = ... , foo(2)
// LHS 3處
// RHS 4處
複製代碼
function foo(a){
console.log(a+b);
}
var b = 2;
foo(2) // 4
複製代碼
引擎從當前的執行做用域開始查找變量,若是找不到,就向上一級繼續查找。當抵達最外層全局做用域時,不管找到仍是沒找到,查找過程都會中止。spa
1.做用域是一套規則,用於肯定在何處以及如何查找變量(標識符)。若是查找的目的是對變量進行賦值,那麼就會使用LHS查詢,若是目的是獲取變量的值,就會使用RHS查詢。code
2.JavaScript引擎首先會在代碼執行前對其進行編譯,在這個過程當中,像var a = 2這樣的聲明會被分解成兩個獨立的步驟:ip
3.不成功的RHS引用會致使拋出ReferenceError異常。不成功的LHS引用會致使自動隱式地建立一個全局變量(非嚴格模式下),該變量使用LHS引用的目標做爲標識符,或者拋出ReferenceError異常(嚴格模式下)內存
JavaScript引擎是如何區分var a; a的變量類型的?
編程語言一般會分爲彙編語言,機器語言,腳本語言,高級語言四類。而高級語言又會分爲解釋類語言和編譯類語言,一般會將JavaScript歸類爲解釋類語言,可是事實上,它是一門編譯類語言,只是與傳統的編譯語言不一樣,它會在程序運行前的幾微秒內進行編譯,而且不會生成字節碼文件。
JavaScript引擎是一個專門處理JavaScript腳本的虛擬機,通常會附帶在網頁瀏覽器之中。 市面上主要的JavaScript引擎有Chrome瀏覽器的V8引擎,Mozilla Firefox的Gecko排版引擎,SpiderMonkey和Rhino,以及Opera等。
晚上睡很差的危害:
1.次日會懵逼,腦子不夠用,
2.次日會暴飲暴食
3.次日會情緒不在線,易怒
4.最恐怖的是日常能夠消化或者沒消化完的情緒會反噬,說話會沒思考,後悔的次數也變多,會更糾結
解決方法:
1.早睡
2.失眠嘗試簡單的催眠方法,減輕睡不着的心理負擔
3.不少時候,不去擔憂次日的事情都不會失眠的,因此在發生晚上睡很差的次日,也沒什麼,相信本身的自我調節能力,時刻保持不失控的狀態。