## v8引擎解析的過程:
- js **首先會解析為抽象語法樹(ast),然後會通過直譯器或者編譯器轉化為 bytecode 或者 machine code
1. js 會首先被解析為 ast,解析的過程其實是略慢的。**越多,解析的過程也就耗費越長,這也是我們需要壓縮**的原因之一。另外一種減少解析時間的方式是預解析,會作用於未執行的函式。
2. 這裡需要注意一點,對於函式來說,應該盡可能避免宣告巢狀函式(類也是函式),因為這樣會造成函式的重複解析。
3. 然後 ignition 負責將 ast 轉化為 bytecode,turbofan 負責編譯出優化後的 machine code,並且 machine code 在執行效率上優於 bytecode 。
### 那麼我們就產生了乙個疑問,什麼情況下**會編譯為 machine code?
- js 是一門動態型別的語言,並且還有一大堆的規則。簡單的加法運算**,內部就需要考慮好幾種規則,比如數字相加、字串相加、物件和字串相加等等。這樣的情況也就勢必導致了內部要增加很多判斷邏輯,降低執行效率。
function test(x) {
return x + x
test(1);
test(2);
test(3);
test(4);
> 對於以上**來說,多次呼叫並且引數一直傳入 number 型別,那麼 v8 就會認為該段**可以編譯為 machine code,因為你固定了型別,不需要再執行很多判斷邏輯了。但是如果一旦我們傳入的引數型別改變,那麼 machine code 就會被 deoptimized 為 bytecode,這樣就有效能上的乙個損耗了。
js數字隨機產生並相加
1 input type text value name plus1 id plus1 size 5 label lable 2 input type text value name plus2 id plus2 size 5 label lable 3 input type text value ...
JS 裡為什麼會有 this
這篇文章是從語言創造者 js 之父的角度 來思考 this,我之前那篇講 this 的文章是從使用者的角度寫的。假設我們有乙個物件 var person saybye function 這個 person 物件有 name 和 age 屬性,還有乙個 sayhi 方法,現在的需求是 呼叫 perso...
用原生js實現數字自相加
text id num value 12.345px button value 這裡隨意輸入都可以 id btn res var num document.getelementbyid num var btn document.getelementbyid btn var res document....