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 的版本 |
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(源代碼)。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。