chore: update code style
diff --git a/en/coding-standard.md b/en/coding-standard.md
index a2df024..0cd6cdd 100644
--- a/en/coding-standard.md
+++ b/en/coding-standard.md
@@ -49,7 +49,7 @@
 **[MUST]** Set off binary operator with spaces. But place no space between unary operator and its operand.
 
 ```js
-var a = !arr.length;
+let a = !arr.length;
 a++;
 a = b + c;
 ```
@@ -119,14 +119,14 @@
 
 ```js
 // good
-var obj = {
+const obj = {
     a: 1,
     b: 2,
     c: 3
 };
 
 // bad
-var obj = {
+const obj = {
     a : 1,
     b:2,
     c :3
@@ -142,7 +142,7 @@
 function funcName() {
 }
 
-var funcName = function funcName() {
+const funcName = function funcName() {
 };
 
 funcName();
@@ -153,7 +153,7 @@
 function funcName () {
 }
 
-var funcName = function funcName () {
+const funcName = function funcName () {
 };
 
 funcName ();
@@ -205,22 +205,22 @@
 
 
 // good
-var arr1 = [];
-var arr2 = [1, 2, 3];
-var obj1 = {};
-var obj2 = {name: 'obj'};
-var obj3 = {
+const arr1 = [];
+const arr2 = [1, 2, 3];
+const obj1 = {};
+const obj2 = {name: 'obj'};
+const obj3 = {
     name: 'obj',
     age: 20,
     sex: 1
 };
 
 // bad
-var arr1 = [ ];
-var arr2 = [ 1, 2, 3 ];
-var obj1 = { };
-var obj2 = { name: 'obj' };
-var obj3 = {name: 'obj', age: 20, sex: 1};
+const arr1 = [ ];
+const arr2 = [ 1, 2, 3 ];
+const obj1 = { };
+const obj2 = { name: 'obj' };
+const obj3 = {name: 'obj', age: 20, sex: 1};
 ```
 
 
@@ -250,7 +250,7 @@
     // Code
 }
 
-var result = number1 + number2 + number3
+const result = number1 + number2 + number3
     + number4 + number5;
 
 
@@ -262,7 +262,7 @@
     // Code
 }
 
-var result = number1 + number2 + number3 +
+const result = number1 + number2 + number3 +
     number4 + number5;
 ```
 
@@ -281,7 +281,7 @@
         sendProduct(user, product);
     }
 }
-var arr = [
+const arr = [
     'candy', 'sugar'
 ];
 
@@ -294,7 +294,7 @@
         sendProduct(user, product);
     }
 }
-var arr = [
+const arr = [
         'candy', 'sugar'
     ];
 ```
@@ -304,7 +304,7 @@
 
 ```js
 // good
-var obj = {
+const obj = {
     a: 1,
     b: 2,
     c: 3
@@ -318,7 +318,7 @@
 
 
 // bad
-var obj = {
+const obj = {
     a: 1
     , b: 2
     , c: 3
@@ -358,10 +358,10 @@
     .highlight()
     .end();
 
-var result = thisIsAVeryVeryLongCondition
+const result = thisIsAVeryVeryLongCondition
     ? resultA : resultB;
 
-var result = condition
+const res = condition
     ? thisIsAVeryVeryLongResult
     : resultB;
 ```
@@ -436,7 +436,7 @@
 };
 
 // For function expression, the semicolon must not be ignored.
-var funcName = function () {
+const funcName = function () {
 };
 ```
 
@@ -447,12 +447,12 @@
 ```js
 // good
 
-var obj = {
+const obj = {
     attr1: 'xxx',
     attr2: 'yyy'
 };
 
-var arr = [
+const arr = [
     'xxx',
     'yyy'
 ];
@@ -460,12 +460,12 @@
 
 // bad
 
-var obj = {
+const obj = {
     attr1: 'xxx',
     attr2: 'yyy',
 };
 
-var arr = [
+const arr = [
     'xxx',
     'yyy',
 ];
@@ -478,7 +478,7 @@
 **[MUST]** Use lowerCamelCase for variables, properties and function names.
 
 ```js
-var loadingModules = {};
+const loadingModules = {};
 function loadProduct() {
 }
 ```
@@ -497,7 +497,7 @@
 ```js
 function parseSVG() {
 }
-var svgParser;
+const svgParser;
 ```
 
 
@@ -510,10 +510,6 @@
 
 ### Compatibility
 
-**[MUST]** The JavaScript code of ECharts should be based on `ECMAScript Language Specification Edition 3 (ES3)`. The language features that not supported by ES3 (namely, features that are only supported by ES5, ES6 or upper versions) must not be used.
-
-But there is an exception that ES Module can be used.
-
 Language features can be polyfilled by some utilities, but must not by modifying the prototype of the built-in JS objects.
 
 
@@ -526,13 +522,13 @@
     sum += val;
 });
 
-var result = zrUtil.map(array, function (val) {
+const result = zrUtil.map(array, function (val) {
     return parse(val);
 });
 
-var pos = zrUtil.indexOf(array, val);
+const pos = zrUtil.indexOf(array, val);
 
-var obj2 = zrUtil.extend({}, obj1);
+const obj2 = zrUtil.extend({}, obj1);
 
 function Element() {
     // ...
@@ -551,7 +547,7 @@
 
 const pos = array.indexOf(val);
 
-var obj2 = Object.assign({}, obj1);
+const obj2 = Object.assign({}, obj1);
 
 class Element {
     // ...
@@ -564,18 +560,18 @@
 
 ### Variable
 
-**[MUST]** Variables must be declared by `var`. And a `var` can not declares more than one variable.
+**[MUST]** Prefer using `const` to declare variable. And one line can not declares more than one variable.
 
 ```js
 // good
-var name = 'MyName';
-var hangModules = [];
-var missModules = [];
-var visited = {};
+const name = 'MyName';
+const hangModules = [];
+const missModules = [];
+const visited = {};
 
 // bad
 name = 'MyName';
-var hangModules = [],
+const hangModules = [],
     missModules = [],
     visited = {};
 ```
@@ -615,15 +611,15 @@
     // ......
 }
 
-for (var i = 0, len = elements.length; i < len; i++) {
-    var element = elements[i];
+for (let i = 0, len = elements.length; i < len; i++) {
+    const element = elements[i];
     addListener(element, 'click', clicker);
 }
 
 
 // bad
-for (var i = 0, len = elements.length; i < len; i++) {
-    var element = elements[i];
+for (let i = 0, len = elements.length; i < len; i++) {
+    const element = elements[i];
     addListener(element, 'click', function () {});
 }
 ```
@@ -677,10 +673,10 @@
 
 ```js
 // good
-var obj = {};
+const obj = {};
 
 // bad
-var obj = new Object();
+const obj = new Object();
 ```
 
 
@@ -688,17 +684,17 @@
 
 ```js
 // good
-var info = {
+const info = {
     name: 'someone',
     age: 28
 };
 
 // bad
-var info = {
+const info = {
     'name': 'someone',
     'age': 28
 };
-var info2 = {
+const info2 = {
     "age": 40
 };
 ```
@@ -719,8 +715,8 @@
 **[SUGGEST]** `hasOwnProperty` should be used to when using `for ... in ...`, in case that some extra properties is added on the prototype of `Object` in some runtime environment.
 
 ```js
-var newInfo = {};
-for (var key in info) {
+const newInfo = {};
+for (const key in info) {
     if (info.hasOwnProperty(key)) {
         newInfo[key] = info[key];
     }
@@ -732,11 +728,11 @@
 
 ```js
 // good
-var arr = [];
-var arr2 = new Array(1e4);
+const arr = [];
+const arr2 = new Array(1e4);
 
 // bad
-var arr = new Array();
+const arr = new Array();
 ```
 
 
diff --git a/zh/coding-standard.md b/zh/coding-standard.md
index ca8cd9d..b0ab7e4 100644
--- a/zh/coding-standard.md
+++ b/zh/coding-standard.md
@@ -49,7 +49,7 @@
 **[强制]** 二元运算符两个操作数之间必须使用空格,但一元运算符与其操作数间不能有空格。 
 
 ```js
-var a = !arr.length;
+let a = !arr.length;
 a++;
 a = b + c;
 ```
@@ -119,14 +119,14 @@
 
 ```js
 // 正例
-var obj = {
+const obj = {
     a: 1,
     b: 2,
     c: 3
 };
 
 // 反例
-var obj = {
+const obj = {
     a : 1,
     b:2,
     c :3
@@ -142,7 +142,7 @@
 function funcName() {
 }
 
-var funcName = function funcName() {
+const funcName = function funcName() {
 };
 
 funcName();
@@ -153,7 +153,7 @@
 function funcName () {
 }
 
-var funcName = function funcName () {
+const funcName = function funcName () {
 };
 
 funcName ();
@@ -205,22 +205,22 @@
 
 
 // 正例
-var arr1 = [];
-var arr2 = [1, 2, 3];
-var obj1 = {};
-var obj2 = {name: 'obj'};
-var obj3 = {
+const arr1 = [];
+const arr2 = [1, 2, 3];
+const obj1 = {};
+const obj2 = {name: 'obj'};
+const obj3 = {
     name: 'obj',
     age: 20,
     sex: 1
 };
 
 // 反例
-var arr1 = [ ];
-var arr2 = [ 1, 2, 3 ];
-var obj1 = { };
-var obj2 = { name: 'obj' };
-var obj3 = {name: 'obj', age: 20, sex: 1};
+const arr1 = [ ];
+const arr2 = [ 1, 2, 3 ];
+const obj1 = { };
+const obj2 = { name: 'obj' };
+const obj3 = {name: 'obj', age: 20, sex: 1};
 ```
 
 
@@ -250,7 +250,7 @@
     // Code
 }
 
-var result = number1 + number2 + number3
+const result = number1 + number2 + number3
     + number4 + number5;
 
 
@@ -262,7 +262,7 @@
     // Code
 }
 
-var result = number1 + number2 + number3 +
+const result = number1 + number2 + number3 +
     number4 + number5;
 ```
 
@@ -280,7 +280,7 @@
         sendProduct(user, product);
     }
 }
-var arr = [
+const arr = [
     'candy', 'sugar'
 ];
 
@@ -293,7 +293,7 @@
         sendProduct(user, product);
     }
 }
-var arr = [
+const arr = [
         'candy', 'sugar'
     ];
 ```
@@ -303,7 +303,7 @@
 
 ```js
 // 正例
-var obj = {
+const obj = {
     a: 1,
     b: 2,
     c: 3
@@ -317,7 +317,7 @@
 
 
 // 反例
-var obj = {
+const obj = {
     a: 1
     , b: 2
     , c: 3
@@ -357,10 +357,10 @@
     .highlight()
     .end();
 
-var result = thisIsAVeryVeryLongCondition
+const result = thisIsAVeryVeryLongCondition
     ? resultA : resultB;
 
-var result = condition
+const res = condition
     ? thisIsAVeryVeryLongResult
     : resultB;
 ```
@@ -435,7 +435,7 @@
 };
 
 // 对于函数表达式,不能忽略分号
-var funcName = function () {
+const funcName = function () {
 };
 ```
 
@@ -446,12 +446,12 @@
 ```js
 // 正例
 
-var obj = {
+const obj = {
     attr1: 'xxx',
     attr2: 'yyy'
 };
 
-var arr = [
+const arr = [
     'xxx',
     'yyy'
 ];
@@ -459,12 +459,12 @@
 
 // 反例
 
-var obj = {
+const obj = {
     attr1: 'xxx',
     attr2: 'yyy',
 };
 
-var arr = [
+const arr = [
     'xxx',
     'yyy',
 ];
@@ -477,7 +477,7 @@
 **[强制]** 变量名、属性名及函数名的命名必须遵循 lowerCamelCase(小骆驼拼写法)。
 
 ```js
-var loadingModules = {};
+const loadingModules = {};
 function loadProduct() {
 }
 ```
@@ -496,7 +496,7 @@
 ```js
 function parseSVG() {
 }
-var svgParser;
+const svgParser;
 ```
 
 
@@ -509,10 +509,6 @@
 
 ### 兼容性
 
-**[强制]** ECharts的JavaScript源代码应基于 `ECMAScript Language Specification Edition 3 (ES3)`,不能使用ES3不支持的语法特性(即不能使用ES5、ES6或更高版本的语法特性)。
-
-但允许使用ES Module。
-
 语法特性可以通过一些工具方法进行弥补,但不能通过修改内置JavaScript对象的原型来实现。
 
 
@@ -525,13 +521,13 @@
     sum += val;
 });
 
-var result = zrUtil.map(array, function (val) {
+const result = zrUtil.map(array, function (val) {
     return parse(val);
 });
 
-var pos = zrUtil.indexOf(array, val);
+const pos = zrUtil.indexOf(array, val);
 
-var obj2 = zrUtil.extend({}, obj1);
+const obj2 = zrUtil.extend({}, obj1);
 
 function Element() {
     // ...
@@ -550,7 +546,7 @@
 
 const pos = array.indexOf(val);
 
-var obj2 = Object.assign({}, obj1);
+const obj2 = Object.assign({}, obj1);
 
 class Element {
     // ...
@@ -563,18 +559,18 @@
 
 ### 变量
 
-**[强制]** 变量必须用 `var` 声明,且一个 `var` 不能同时声明多个变量。
+**[强制]** 优先使用`const`声明变量 且一行不能同时声明多个变量。
 
 ```js
 // 正例
-var name = 'MyName';
-var hangModules = [];
-var missModules = [];
-var visited = {};
+const name = 'MyName';
+const hangModules = [];
+const missModules = [];
+const visited = {};
 
 // 反例
 name = 'MyName';
-var hangModules = [],
+const hangModules = [],
     missModules = [],
     visited = {};
 ```
@@ -614,15 +610,15 @@
     // ......
 }
 
-for (var i = 0, len = elements.length; i < len; i++) {
-    var element = elements[i];
+for (let i = 0, len = elements.length; i < len; i++) {
+    const element = elements[i];
     addListener(element, 'click', clicker);
 }
 
 
 // 反例
-for (var i = 0, len = elements.length; i < len; i++) {
-    var element = elements[i];
+for (let i = 0, len = elements.length; i < len; i++) {
+    const element = elements[i];
     addListener(element, 'click', function () {});
 }
 ```
@@ -676,10 +672,10 @@
 
 ```js
 // 正例
-var obj = {};
+const obj = {};
 
 // 反例
-var obj = new Object();
+const obj = new Object();
 ```
 
 
@@ -687,17 +683,17 @@
 
 ```js
 // 正例
-var info = {
+const info = {
     name: 'someone',
     age: 28
 };
 
 // 反例
-var info = {
+const info = {
     'name': 'someone',
     'age': 28
 };
-var info2 = {
+const info2 = {
     "age": 40
 };
 ```
@@ -718,8 +714,8 @@
 **[推荐]** 使用 `for ... in ...` 时,应当注意使用 `hasOwnProperty` 以防 `Object` 的原型在某些运行时环境中被添加一些额外属性的情况。
 
 ```js
-var newInfo = {};
-for (var key in info) {
+const newInfo = {};
+for (const key in info) {
     if (info.hasOwnProperty(key)) {
         newInfo[key] = info[key];
     }
@@ -731,11 +727,11 @@
 
 ```js
 // 正例
-var arr = [];
-var arr2 = new Array(1e4);
+const arr = [];
+const arr2 = new Array(1e4);
 
 // 反例
-var arr = new Array();
+const arr = new Array();
 ```