整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          跨端輕量JavaScript引擎的實現與探索

          、JavaScript

          1.JavaScript語言

          JavaScript是ECMAScript的實現,由ECMA 39(歐洲計算機制造商協會39號技術委員會)負責制定ECMAScript標準。

          ECMAScript發展史:

          時間

          版本

          說明

          1997年7月

          ES1.0 發布

          當年7月,ECMA262 標準出臺

          1998年6月

          ES2.0 發布

          該版本修改完全符合ISO/IEC 16262國際標準。

          1999年12月

          ES3.0 發布

          成為 JavaScript 的通行標準,得到了廣泛支持

          2007年10月

          ES4.0草案發布

          各大廠商意見分歧,該方案未通過

          2008年7月

          發布ES3.1,并改名為ECMAScript 5

          廢除ECMAScript 4.0,所以4.0版本不存在

          2009年12月

          ESt 5.0 正式發布


          2011年6月

          ES5.1 發布

          該版本成為了 ISO 國際標準(ISO/IEC 16262:2011)

          2013年12月

          ES6 草案發布


          2015年6月

          ES6 正式發布,并且更名為“ECMAScript 2015”

          TC39委員會決定每年發布一個ECMAScript 的版本

          2.JavaScript引擎

          JavaScript引擎是指用于處理以及執行JavaScript腳本的虛擬機。

          常見的JavaScript引擎:


          ??

          嘍,大家好,我是雷工。

          JavaScript的運算符可以根據所需表達式的個數,分為一元運算符、二元運算符、三元運算符。

          一、一元運算符

          1、一元運算符:只需要一個表達式就可以運算的運算符。

          示例:正負號

          一元運算符有兩種,++,--

          2、自增:

          符號:++

          用途:讓變量值+1

          前置自增和后置自增單獨舒勇沒有區別(如上圖所示↑)

          前置自增和后置自增如果參與運算就有區別(如下圖所示↓)

          關于自增(++)實際開發中,一般都是單獨使用,后置++應用更多。

          3、自減

          符號:--

          用途:讓變量值-1

          4、應用場景:

          常常用于計數使用,在循環語句中使用一元運算。

          5、注意事項:

          一元運算符連寫,中間不能有任何的空格。

          6、一元運算符總結

          6.1、一元運算符每次只能固定的加1或者減1;

          6.2、如何解決讓變量每次累加任何大小的值?可以使用賦值運算符+=實現。

          示例:

          let x = 1;
          x += 9;//想實現每次累加多少就+=多少;

          6.3、一元運算符只有賦值給新的變量,新的變量值有區別的。

          示例:

          let x = 1;
          let y = x++;
          let z = ++x;
          console.log(x); //結果為:2 ;

          console.log(y); //結果為:1 ; 原因:++在變量x的后面,計算機先將變量x原來的值賦值給變量y,賦值完成后,變量x自己再加1;

          console.log(z); //結果為:2 ; 原因:++在變量x的前面,計算機先將變量x加1,然后將加1后的值給變量y,

          7、一元運算符面試題

          示例1:

          let a=1;
          let sum=a++ + ++a + a;
          //第一步:1 + ++a + a
          //第二步:1 + ++2 + a
          //第三步:1 + 3 + 3
          //第四步:結果為7

          示例2:

          let x =1;
          let sum =++x + x++;
          console.log(sum);//結果為4

          示例3:

          let y = 1;
          let sum =y++ + y++;
          console.log(sum);//結果為3

          二、二元運算符:

          示例:

          let n =30+40

          用WebAssembly的導入導出功能可以靈活地實現宿主JavaScript程序與加載的單個wasm模塊之間的交互,那么如何在宿主程序與多個wasm之間傳遞和共享數據呢?這就需要使用到Global這個重要的對象了。

          一、數值類型全局變量
          二、將JavaScript函數設置為全局變量
          三、利用全局變量處理字符串

          一、數值類型全局變量

          Global全局變量支持多種值類型,包括數組(i32/i64和f32/f64)、向量和引用類型(externref和funcref)。下面的實例利用Global提供了全局計數的功能。在WebAssembly Text Format (WAT)文件app.wat中,我們從宿主JavaScript應用中導入了一個i32類型的可讀寫(mut表示可以修改)的全局變量,導入路徑為“imports.counter”,我們將其命名為$counter。在用于自增的導出函數increment中,我們通過執行global.get指令讀取全局變量的值,并將其加1之后,執行global.set指令對全局變量重新賦值。

          (module
          (global $counter (import "imports" "counter") (mut i32))
          (func (export "increment")
          (i32.add (global.get $counter) (i32.const 1))
          (global.set $counter)
          )
          )

          在index.html文件中,我們在頁面中添加了一個“Increment”按鈕,并利用一個<span>顯式計算器當前的值。JavaScript腳本通過調用WebAssembly.Global構造函數將代表全局變量的Global對象創建出來后,調用WebAssembly.instantiateStreaming加載app.wat編譯生成的app.wasm模塊文件,并將此Global對象包含在導入對象中。

          <html>
          <head></head>
          <body>
          <span id="counter">0</span>
          <button id="btnInc">Increment</button>
          <script>
          const globalCounter = new WebAssembly.Global({ value: "i32", mutable: true }, 0);
          WebAssembly
          .instantiateStreaming(fetch("app.wasm"), {"imports":{"counter":globalCounter}})
          .then(results => {
          document.getElementById("btnInc").onclick = ()=>{
          results.instance.exports.increment();
          document.getElementById("counter").innerText = globalCounter.value;
          };
          });
          </script>
          </body>
          </html>

          wasm模塊成功導入后,我們注冊了按鈕的click事件,使之在調用導出的increment函數后,重新刷新計數器的值。如下圖所示,針對“Increment”的每次點擊都將計數器加1(源代碼)。


          主站蜘蛛池模板: 波多野结衣一区二区三区高清av| 日韩在线一区视频| 一区二区三区内射美女毛片 | 一区二区3区免费视频| 大香伊蕉日本一区二区| 国产中文字幕一区| 国产精品福利区一区二区三区四区 | 国产91精品一区| 夜夜添无码一区二区三区| 一区二区三区四区精品| 中文字幕在线观看一区二区三区 | 韩国精品一区二区三区无码视频 | 日本一区二区在线免费观看| 精品国产亚洲一区二区在线观看| 日韩好片一区二区在线看| 亚洲乱码一区二区三区国产精品| 国产伦精品一区二区三区| 国产一区二区三区在线影院| 亚洲一区二区三区免费| 国产精品亚洲一区二区三区在线| 熟妇人妻一区二区三区四区| 亚洲综合无码一区二区三区 | 国产福利一区视频| 亚洲一区二区三区高清| 久久无码人妻精品一区二区三区| 亚洲一区二区三区国产精华液| 日本韩国黄色一区二区三区| 久久精品国产免费一区| 无码人妻一区二区三区一| 色偷偷一区二区无码视频| 中文字幕精品一区| 日韩免费无码视频一区二区三区 | 日韩一区二区超清视频| 国产精品无码一区二区在线 | 精品国产AV一区二区三区| 无码国产亚洲日韩国精品视频一区二区三区 | 精品一区二区三区电影| 伊人色综合一区二区三区| 99久久精品日本一区二区免费| 国产AV国片精品一区二区| 无码国产精成人午夜视频一区二区 |