js 數字相加 為什麼TS優於JS

2021-10-11 11:37:07 字數 814 閱讀 5637

## 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....