You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@echarts.apache.org by su...@apache.org on 2020/03/20 23:48:22 UTC

[incubator-echarts] 04/04: ts: [var => let/const] part II: batch replace var to let or const. And add rule "no-var" to eslintrc

This is an automated email from the ASF dual-hosted git repository.

sushuang pushed a commit to branch typescript
in repository https://gitbox.apache.org/repos/asf/incubator-echarts.git

commit 0b5b67f4f17c2f3abc48c466bff0923e36e72892
Author: 100pah <su...@gmail.com>
AuthorDate: Sat Mar 21 07:47:27 2020 +0800

    ts: [var => let/const] part II: batch replace var to let or const.
    And add rule "no-var" to eslintrc
---
 extension-src/.eslintrc.yaml                      |   4 +-
 extension-src/bmap/BMapCoordSys.ts                |  48 +-
 extension-src/bmap/BMapModel.ts                   |   2 +-
 extension-src/bmap/BMapView.ts                    |  28 +-
 extension-src/bmap/bmap.ts                        |   6 +-
 extension-src/dataTool/gexf.ts                    |  66 +--
 extension-src/dataTool/index.ts                   |   2 +-
 extension-src/dataTool/prepareBoxplotData.ts      |  36 +-
 src/.eslintrc.yaml                                |   4 +-
 src/CoordinateSystem.ts                           |   6 +-
 src/ExtensionAPI.ts                               |   2 +-
 src/action/geoRoam.ts                             |   6 +-
 src/action/roamHelper.ts                          |  16 +-
 src/chart/bar/BarSeries.ts                        |   4 +-
 src/chart/bar/BarView.ts                          | 196 ++++----
 src/chart/bar/BaseBarSeries.ts                    |  12 +-
 src/chart/bar/PictorialBarView.ts                 | 210 ++++----
 src/chart/bar/barItemStyle.ts                     |   6 +-
 src/chart/bar/helper.ts                           |   4 +-
 src/chart/boxplot/BoxplotView.ts                  |  46 +-
 src/chart/boxplot/boxplotLayout.ts                |  88 ++--
 src/chart/boxplot/boxplotVisual.ts                |  10 +-
 src/chart/candlestick/CandlestickSeries.ts        |   2 +-
 src/chart/candlestick/CandlestickView.ts          |  82 ++--
 src/chart/candlestick/candlestickLayout.ts        |  98 ++--
 src/chart/candlestick/candlestickVisual.ts        |  18 +-
 src/chart/custom.ts                               | 140 +++---
 src/chart/effectScatter/EffectScatterView.ts      |  10 +-
 src/chart/funnel/FunnelSeries.ts                  |  12 +-
 src/chart/funnel/FunnelView.ts                    |  60 +--
 src/chart/funnel/funnelLayout.ts                  |  90 ++--
 src/chart/gauge/GaugeView.ts                      | 172 +++----
 src/chart/gauge/PointerPath.ts                    |  14 +-
 src/chart/graph/GraphSeries.ts                    |  40 +-
 src/chart/graph/GraphView.ts                      |  98 ++--
 src/chart/graph/adjustEdge.ts                     |  56 +--
 src/chart/graph/categoryFilter.ts                 |  16 +-
 src/chart/graph/categoryVisual.ts                 |  30 +-
 src/chart/graph/circularLayoutHelper.ts           |  58 +--
 src/chart/graph/createView.ts                     |  30 +-
 src/chart/graph/edgeVisual.ts                     |  24 +-
 src/chart/graph/forceHelper.ts                    |  48 +-
 src/chart/graph/forceLayout.ts                    |  60 +--
 src/chart/graph/graphAction.ts                    |   6 +-
 src/chart/graph/graphHelper.ts                    |  14 +-
 src/chart/graph/simpleLayout.ts                   |  18 +-
 src/chart/graph/simpleLayoutHelper.ts             |  14 +-
 src/chart/heatmap/HeatmapLayer.ts                 |  66 +--
 src/chart/heatmap/HeatmapSeries.ts                |   2 +-
 src/chart/heatmap/HeatmapView.ts                  |  90 ++--
 src/chart/helper/EffectLine.ts                    |  52 +-
 src/chart/helper/EffectPolyline.ts                |  26 +-
 src/chart/helper/EffectSymbol.ts                  |  54 +--
 src/chart/helper/LargeLineDraw.ts                 |  42 +-
 src/chart/helper/LargeSymbolDraw.ts               |  76 +--
 src/chart/helper/Line.ts                          | 132 ++---
 src/chart/helper/LineDraw.ts                      |  24 +-
 src/chart/helper/LinePath.ts                      |   8 +-
 src/chart/helper/Polyline.ts                      |  24 +-
 src/chart/helper/Symbol.ts                        |  68 +--
 src/chart/helper/SymbolDraw.ts                    |  36 +-
 src/chart/helper/createClipPathFromCoordSys.ts    |  20 +-
 src/chart/helper/createGraphFromNodeEdge.ts       |  26 +-
 src/chart/helper/createListFromArray.ts           |  34 +-
 src/chart/helper/createListSimply.ts              |   6 +-
 src/chart/helper/createRenderPlanner.ts           |  14 +-
 src/chart/helper/labelHelper.ts                   |  10 +-
 src/chart/helper/treeHelper.ts                    |  14 +-
 src/chart/helper/whiskerBoxCommon.ts              |  38 +-
 src/chart/line/LineSeries.ts                      |   2 +-
 src/chart/line/LineView.ts                        | 196 ++++----
 src/chart/line/helper.ts                          |  32 +-
 src/chart/line/lineAnimationDiff.ts               |  46 +-
 src/chart/line/poly.ts                            |  92 ++--
 src/chart/lines/LinesSeries.ts                    |  72 +--
 src/chart/lines/LinesView.ts                      |  40 +-
 src/chart/lines/linesLayout.ts                    |  28 +-
 src/chart/lines/linesVisual.ts                    |  16 +-
 src/chart/map/MapSeries.ts                        |  48 +-
 src/chart/map/MapView.ts                          |  58 +--
 src/chart/map/backwardCompat.ts                   |   2 +-
 src/chart/map/mapDataStatistic.ts                 |  26 +-
 src/chart/map/mapSymbolLayout.ts                  |  24 +-
 src/chart/map/mapVisual.ts                        |   8 +-
 src/chart/parallel/ParallelSeries.ts              |  14 +-
 src/chart/parallel/ParallelView.ts                |  72 +--
 src/chart/parallel/parallelVisual.ts              |  28 +-
 src/chart/pie/PieSeries.ts                        |  18 +-
 src/chart/pie/PieView.ts                          | 128 ++---
 src/chart/pie/labelLayout.ts                      | 124 ++---
 src/chart/pie/pieLayout.ts                        |  66 +--
 src/chart/radar/RadarSeries.ts                    |  20 +-
 src/chart/radar/RadarView.ts                      |  70 +--
 src/chart/radar/backwardCompat.ts                 |   4 +-
 src/chart/radar/radarLayout.ts                    |  12 +-
 src/chart/sankey/SankeySeries.ts                  |  48 +-
 src/chart/sankey/SankeyView.ts                    |  92 ++--
 src/chart/sankey/sankeyLayout.ts                  | 150 +++---
 src/chart/sankey/sankeyVisual.ts                  |  16 +-
 src/chart/scatter/ScatterSeries.ts                |   4 +-
 src/chart/scatter/ScatterView.ts                  |  22 +-
 src/chart/sunburst/SunburstPiece.ts               |  98 ++--
 src/chart/sunburst/SunburstSeries.ts              |  18 +-
 src/chart/sunburst/SunburstView.ts                |  48 +-
 src/chart/sunburst/sunburstAction.ts              |  12 +-
 src/chart/sunburst/sunburstLayout.ts              |  86 ++--
 src/chart/themeRiver/ThemeRiverSeries.ts          | 100 ++--
 src/chart/themeRiver/ThemeRiverView.ts            |  54 +--
 src/chart/themeRiver/themeRiverLayout.ts          |  68 +--
 src/chart/themeRiver/themeRiverVisual.ts          |  14 +-
 src/chart/tree/TreeSeries.ts                      |  30 +-
 src/chart/tree/TreeView.ts                        | 180 +++----
 src/chart/tree/layoutHelper.ts                    |  56 +--
 src/chart/tree/traversalHelper.ts                 |  18 +-
 src/chart/tree/treeAction.ts                      |  10 +-
 src/chart/tree/treeLayout.ts                      |  38 +-
 src/chart/treemap/Breadcrumb.ts                   |  48 +-
 src/chart/treemap/TreemapSeries.ts                |  40 +-
 src/chart/treemap/TreemapView.ts                  | 198 ++++----
 src/chart/treemap/treemapAction.ts                |  12 +-
 src/chart/treemap/treemapLayout.ts                | 210 ++++----
 src/chart/treemap/treemapVisual.ts                |  66 +--
 src/component/axis/AngleAxisView.ts               | 124 ++---
 src/component/axis/AxisBuilder.ts                 | 206 ++++----
 src/component/axis/AxisView.ts                    |   8 +-
 src/component/axis/CartesianAxisView.ts           |  62 +--
 src/component/axis/ParallelAxisView.ts            |  40 +-
 src/component/axis/RadiusAxisView.ts              |  60 +--
 src/component/axis/SingleAxisView.ts              |  40 +-
 src/component/axis/axisSplitHelper.ts             |  38 +-
 src/component/axis/parallelAxisAction.ts          |   2 +-
 src/component/axisPointer.ts                      |   2 +-
 src/component/axisPointer/AxisPointerView.ts      |   4 +-
 src/component/axisPointer/BaseAxisPointer.ts      |  86 ++--
 src/component/axisPointer/CartesianAxisPointer.ts |  46 +-
 src/component/axisPointer/PolarAxisPointer.ts     |  52 +-
 src/component/axisPointer/SingleAxisPointer.ts    |  44 +-
 src/component/axisPointer/axisTrigger.ts          | 124 ++---
 src/component/axisPointer/findPointFromSeries.ts  |  16 +-
 src/component/axisPointer/globalListener.ts       |  22 +-
 src/component/axisPointer/modelHelper.ts          |  84 ++--
 src/component/axisPointer/viewHelper.ts           |  50 +-
 src/component/brush/BrushModel.ts                 |   6 +-
 src/component/brush/BrushView.ts                  |   4 +-
 src/component/brush/preprocessor.ts               |  18 +-
 src/component/brush/selector.ts                   |  30 +-
 src/component/brush/visualEncoding.ts             |  74 +--
 src/component/calendar/CalendarView.ts            | 172 +++----
 src/component/dataZoom/AxisProxy.ts               | 130 ++---
 src/component/dataZoom/DataZoomModel.ts           |  92 ++--
 src/component/dataZoom/DataZoomView.ts            |  14 +-
 src/component/dataZoom/InsideZoomView.ts          |  56 +--
 src/component/dataZoom/SliderZoomView.ts          | 216 ++++-----
 src/component/dataZoom/dataZoomAction.ts          |   4 +-
 src/component/dataZoom/dataZoomProcessor.ts       |  10 +-
 src/component/dataZoom/helper.ts                  |  12 +-
 src/component/dataZoom/history.ts                 |  22 +-
 src/component/dataZoom/roams.ts                   |  36 +-
 src/component/geo.ts                              |   4 +-
 src/component/geo/GeoView.ts                      |   4 +-
 src/component/graphic.ts                          |  90 ++--
 src/component/helper/BrushController.ts           | 240 ++++-----
 src/component/helper/BrushTargetManager.ts        | 102 ++--
 src/component/helper/MapDraw.ts                   |  94 ++--
 src/component/helper/RoamController.ts            |  40 +-
 src/component/helper/brushHelper.ts               |   8 +-
 src/component/helper/cursorHelper.ts              |   6 +-
 src/component/helper/interactionMutex.ts          |   8 +-
 src/component/helper/listComponent.ts             |  12 +-
 src/component/helper/roamHelper.ts                |  20 +-
 src/component/helper/selectableMixin.ts           |  12 +-
 src/component/helper/sliderMove.ts                |  12 +-
 src/component/legend/LegendModel.ts               |  50 +-
 src/component/legend/LegendView.ts                | 144 +++---
 src/component/legend/ScrollableLegendModel.ts     |   6 +-
 src/component/legend/ScrollableLegendView.ts      | 128 ++---
 src/component/legend/legendAction.ts              |  12 +-
 src/component/legend/legendFilter.ts              |   4 +-
 src/component/legend/scrollableLegendAction.ts    |   2 +-
 src/component/marker/MarkAreaView.ts              |  78 +--
 src/component/marker/MarkLineView.ts              |  98 ++--
 src/component/marker/MarkPointView.ts             |  46 +-
 src/component/marker/MarkerModel.ts               |  22 +-
 src/component/marker/MarkerView.ts                |   4 +-
 src/component/marker/markerHelper.ts              |  56 +--
 src/component/parallel.ts                         |  20 +-
 src/component/radar/RadarView.ts                  |  66 +--
 src/component/timeline/SliderTimelineView.ts      | 208 ++++----
 src/component/timeline/TimelineModel.ts           |  20 +-
 src/component/timeline/preprocessor.ts            |  18 +-
 src/component/timeline/timelineAction.ts          |   4 +-
 src/component/title.ts                            |  38 +-
 src/component/toolbox/ToolboxModel.ts             |   2 +-
 src/component/toolbox/ToolboxView.ts              |  62 +--
 src/component/toolbox/feature/Brush.ts            |  18 +-
 src/component/toolbox/feature/DataView.ts         | 140 +++---
 src/component/toolbox/feature/DataZoom.ts         |  54 +--
 src/component/toolbox/feature/MagicType.ts        |  40 +-
 src/component/toolbox/feature/Restore.ts          |   2 +-
 src/component/toolbox/feature/SaveAsImage.ts      |  28 +-
 src/component/toolbox/featureManager.ts           |   2 +-
 src/component/tooltip/TooltipHTMLContent.ts       |  76 +--
 src/component/tooltip/TooltipRichContent.ts       |  20 +-
 src/component/tooltip/TooltipView.ts              | 216 ++++-----
 src/component/visualMap/ContinuousModel.ts        |  50 +-
 src/component/visualMap/ContinuousView.ts         | 232 ++++-----
 src/component/visualMap/PiecewiseModel.ts         | 106 ++--
 src/component/visualMap/PiecewiseView.ts          |  60 +--
 src/component/visualMap/VisualMapModel.ts         |  70 +--
 src/component/visualMap/VisualMapView.ts          |  24 +-
 src/component/visualMap/helper.ts                 |  20 +-
 src/component/visualMap/preprocessor.ts           |   6 +-
 src/component/visualMap/visualEncoding.ts         |  28 +-
 src/component/visualMap/visualMapAction.ts        |   2 +-
 src/config.ts                                     |   4 +-
 src/coord/Axis.ts                                 |  68 +--
 src/coord/View.ts                                 |  48 +-
 src/coord/axisCommonTypes.ts                      |   2 +-
 src/coord/axisDefault.ts                          |  10 +-
 src/coord/axisHelper.ts                           | 114 ++---
 src/coord/axisModelCommonMixin.ts                 |  10 +-
 src/coord/axisModelCreator.ts                     |  12 +-
 src/coord/axisTickLabelBuilder.ts                 | 116 ++---
 src/coord/calendar/Calendar.ts                    |  98 ++--
 src/coord/calendar/CalendarModel.ts               |   8 +-
 src/coord/calendar/prepareCustom.ts               |   4 +-
 src/coord/cartesian/Axis2D.ts                     |   8 +-
 src/coord/cartesian/AxisModel.ts                  |   2 +-
 src/coord/cartesian/Cartesian.ts                  |  12 +-
 src/coord/cartesian/Cartesian2D.ts                |  36 +-
 src/coord/cartesian/Grid.ts                       | 122 ++---
 src/coord/cartesian/cartesianAxisHelper.ts        |  30 +-
 src/coord/cartesian/prepareCustom.ts              |   8 +-
 src/coord/geo/Geo.ts                              |  26 +-
 src/coord/geo/GeoModel.ts                         |  14 +-
 src/coord/geo/Region.ts                           |  52 +-
 src/coord/geo/fix/diaoyuIsland.ts                 |   8 +-
 src/coord/geo/fix/geoCoord.ts                     |   6 +-
 src/coord/geo/fix/nanhai.ts                       |   8 +-
 src/coord/geo/fix/textCoord.ts                    |   6 +-
 src/coord/geo/geoCreator.ts                       |  58 +--
 src/coord/geo/geoJSONLoader.ts                    |  20 +-
 src/coord/geo/geoSVGLoader.ts                     |  36 +-
 src/coord/geo/geoSourceManager.ts                 |  30 +-
 src/coord/geo/mapDataStorage.ts                   |  14 +-
 src/coord/geo/parseGeoJson.ts                     |  26 +-
 src/coord/geo/prepareCustom.ts                    |  10 +-
 src/coord/parallel/AxisModel.ts                   |  12 +-
 src/coord/parallel/Parallel.ts                    | 185 ++++---
 src/coord/parallel/ParallelModel.ts               |  10 +-
 src/coord/parallel/parallelCreator.ts             |   6 +-
 src/coord/parallel/parallelPreprocessor.ts        |   8 +-
 src/coord/polar/AngleAxis.ts                      |  32 +-
 src/coord/polar/Polar.ts                          |  60 +--
 src/coord/polar/PolarModel.ts                     |   4 +-
 src/coord/polar/polarCreator.ts                   |  42 +-
 src/coord/polar/prepareCustom.ts                  |  14 +-
 src/coord/radar/Radar.ts                          |  74 +--
 src/coord/radar/RadarModel.ts                     |  36 +-
 src/coord/single/Single.ts                        |  40 +-
 src/coord/single/SingleAxis.ts                    |   6 +-
 src/coord/single/prepareCustom.ts                 |   8 +-
 src/coord/single/singleAxisHelper.ts              |  20 +-
 src/coord/single/singleCreator.ts                 |   6 +-
 src/data/DataDiffer.ts                            |  20 +-
 src/data/Graph.ts                                 |  70 +--
 src/data/List.ts                                  | 564 +++++++++++-----------
 src/data/OrdinalMeta.ts                           |  12 +-
 src/data/Tree.ts                                  |  64 +--
 src/data/helper/completeDimensions.ts             |  58 +--
 src/data/helper/dataProvider.ts                   |  66 +--
 src/data/helper/dataStackHelper.ts                |  20 +-
 src/data/helper/dimensionHelper.ts                |  38 +-
 src/data/helper/linkList.ts                       |  14 +-
 src/data/helper/sourceHelper.ts                   | 132 ++---
 src/echarts.ts                                    | 472 +++++++++---------
 src/export.ts                                     |   6 +-
 src/helper.ts                                     |  10 +-
 src/layout/barGrid.ts                             | 228 ++++-----
 src/layout/barPolar.ts                            | 122 ++---
 src/layout/points.ts                              |  26 +-
 src/loading/default.ts                            |  16 +-
 src/model/Component.ts                            |  36 +-
 src/model/Global.ts                               | 116 ++---
 src/model/Model.ts                                |  24 +-
 src/model/OptionManager.ts                        |  62 +--
 src/model/Series.ts                               | 120 ++---
 src/model/globalDefault.ts                        |   2 +-
 src/model/mixin/areaStyle.ts                      |   2 +-
 src/model/mixin/colorPalette.ts                   |  20 +-
 src/model/mixin/dataFormat.ts                     |  40 +-
 src/model/mixin/itemStyle.ts                      |   8 +-
 src/model/mixin/lineStyle.ts                      |  10 +-
 src/model/mixin/makeStyleMapper.ts                |  10 +-
 src/model/mixin/textStyle.ts                      |   4 +-
 src/model/referHelper.ts                          |  30 +-
 src/preprocessor/backwardCompat.ts                |  20 +-
 src/preprocessor/helper/compatStyle.ts            |  48 +-
 src/processor/dataFilter.ts                       |   8 +-
 src/processor/dataSample.ts                       |  40 +-
 src/processor/dataStack.ts                        |  36 +-
 src/scale/Interval.ts                             |  66 +--
 src/scale/Log.ts                                  |  50 +-
 src/scale/Ordinal.ts                              |   8 +-
 src/scale/Scale.ts                                |   4 +-
 src/scale/Time.ts                                 |  54 +--
 src/scale/helper.ts                               |  12 +-
 src/stream/Scheduler.ts                           | 118 ++---
 src/stream/task.ts                                |  64 +--
 src/theme/dark.ts                                 |   8 +-
 src/theme/light.ts                                |   2 +-
 src/util/ECEventProcessor.ts                      |  36 +-
 src/util/KDTree.ts                                |  40 +-
 src/util/animation.ts                             |  12 +-
 src/util/clazz.ts                                 |  50 +-
 src/util/component.ts                             |  38 +-
 src/util/format.ts                                |  54 +--
 src/util/graphic.ts                               | 184 +++----
 src/util/layout.ts                                | 100 ++--
 src/util/model.ts                                 |  86 ++--
 src/util/number.ts                                |  90 ++--
 src/util/quickSelect.ts                           |  12 +-
 src/util/shape/sausage.ts                         |  32 +-
 src/util/symbol.ts                                |  22 +-
 src/util/throttle.ts                              |  38 +-
 src/util/types.ts                                 |  22 +-
 src/view/Chart.ts                                 |  30 +-
 src/visual/LegendVisualProvider.ts                |   8 +-
 src/visual/VisualMapping.ts                       |  70 +--
 src/visual/aria.ts                                |  46 +-
 src/visual/dataColor.ts                           |  24 +-
 src/visual/seriesColor.ts                         |  18 +-
 src/visual/symbol.ts                              |  30 +-
 src/visual/visualDefault.ts                       |   6 +-
 src/visual/visualSolution.ts                      |  54 +--
 335 files changed, 8223 insertions(+), 8224 deletions(-)

diff --git a/extension-src/.eslintrc.yaml b/extension-src/.eslintrc.yaml
index d060c39..1b663c4 100644
--- a/extension-src/.eslintrc.yaml
+++ b/extension-src/.eslintrc.yaml
@@ -80,7 +80,7 @@ rules:
     no-undef: 2
     no-undef-init: 2
     "no-use-before-define": "off"
-    "@typescript-eslint/no-use-before-define": 2
+    "@typescript-eslint/no-use-before-define": 0
     brace-style:
         - 2
         - "stroustrup"
@@ -184,7 +184,7 @@ rules:
     no-const-assign: 2
     # no-dupe-class-members: 2
     no-this-before-super: 0
-    no-var: 0
+    no-var: 2
     no-duplicate-imports: 2
     prefer-rest-params: 0
     unicode-bom: 2
diff --git a/extension-src/bmap/BMapCoordSys.ts b/extension-src/bmap/BMapCoordSys.ts
index 034e464..26e08ed 100644
--- a/extension-src/bmap/BMapCoordSys.ts
+++ b/extension-src/bmap/BMapCoordSys.ts
@@ -55,24 +55,24 @@ BMapCoordSys.prototype.getBMap = function () {
 };
 
 BMapCoordSys.prototype.dataToPoint = function (data) {
-    var point = new BMap.Point(data[0], data[1]);
+    let point = new BMap.Point(data[0], data[1]);
     // TODO mercator projection is toooooooo slow
-    // var mercatorPoint = this._projection.lngLatToPoint(point);
+    // let mercatorPoint = this._projection.lngLatToPoint(point);
 
-    // var width = this._api.getZr().getWidth();
-    // var height = this._api.getZr().getHeight();
-    // var divider = Math.pow(2, 18 - 10);
+    // let width = this._api.getZr().getWidth();
+    // let height = this._api.getZr().getHeight();
+    // let divider = Math.pow(2, 18 - 10);
     // return [
     //     Math.round((mercatorPoint.x - this._center.x) / divider + width / 2),
     //     Math.round((this._center.y - mercatorPoint.y) / divider + height / 2)
     // ];
-    var px = this._bmap.pointToOverlayPixel(point);
-    var mapOffset = this._mapOffset;
+    let px = this._bmap.pointToOverlayPixel(point);
+    let mapOffset = this._mapOffset;
     return [px.x - mapOffset[0], px.y - mapOffset[1]];
 };
 
 BMapCoordSys.prototype.pointToData = function (pt) {
-    var mapOffset = this._mapOffset;
+    let mapOffset = this._mapOffset;
     pt = this._bmap.overlayPixelToPoint({
         x: pt[0] + mapOffset[0],
         y: pt[1] + mapOffset[1]
@@ -81,7 +81,7 @@ BMapCoordSys.prototype.pointToData = function (pt) {
 };
 
 BMapCoordSys.prototype.getViewRect = function () {
-    var api = this._api;
+    let api = this._api;
     return new graphic.BoundingRect(0, 0, api.getWidth(), api.getHeight());
 };
 
@@ -90,7 +90,7 @@ BMapCoordSys.prototype.getRoamTransform = function () {
 };
 
 BMapCoordSys.prototype.prepareCustoms = function (data) {
-    var rect = this.getViewRect();
+    let rect = this.getViewRect();
     return {
         coordSys: {
             // The name exposed to user is always 'cartesian2d' but not 'grid'.
@@ -110,10 +110,10 @@ BMapCoordSys.prototype.prepareCustoms = function (data) {
 function dataToCoordSize(dataSize, dataItem) {
     dataItem = dataItem || [0, 0];
     return zrUtil.map([0, 1], function (dimIdx) {
-        var val = dataItem[dimIdx];
-        var halfSize = dataSize[dimIdx] / 2;
-        var p1 = [];
-        var p2 = [];
+        let val = dataItem[dimIdx];
+        let halfSize = dataSize[dimIdx] / 2;
+        let p1 = [];
+        let p2 = [];
         p1[dimIdx] = val - halfSize;
         p2[dimIdx] = val + halfSize;
         p1[1 - dimIdx] = p2[1 - dimIdx] = dataItem[1 - dimIdx];
@@ -151,13 +151,13 @@ function createOverlayCtor() {
 }
 
 BMapCoordSys.create = function (ecModel, api) {
-    var bmapCoordSys;
-    var root = api.getDom();
+    let bmapCoordSys;
+    let root = api.getDom();
 
     // TODO Dispose
     ecModel.eachComponent('bmap', function (bmapModel) {
-        var painter = api.getZr().painter;
-        var viewportRoot = painter.getViewportRoot();
+        let painter = api.getZr().painter;
+        let viewportRoot = painter.getViewportRoot();
         if (typeof BMap === 'undefined') {
             throw new Error('BMap api is not loaded');
         }
@@ -165,10 +165,10 @@ BMapCoordSys.create = function (ecModel, api) {
         if (bmapCoordSys) {
             throw new Error('Only one bmap component can exist');
         }
-        var bmap;
+        let bmap;
         if (!bmapModel.__bmap) {
             // Not support IE8
-            var bmapRoot = root.querySelector('.ec-extension-bmap');
+            let bmapRoot = root.querySelector('.ec-extension-bmap');
             if (bmapRoot) {
                 // Reset viewport left and top, which will be changed
                 // in moving handler in BMapView
@@ -183,7 +183,7 @@ BMapCoordSys.create = function (ecModel, api) {
             root.appendChild(bmapRoot);
             bmap = bmapModel.__bmap = new BMap.Map(bmapRoot);
 
-            var overlay = new Overlay(viewportRoot);
+            let overlay = new Overlay(viewportRoot);
             bmap.addOverlay(overlay);
 
             // Override
@@ -195,10 +195,10 @@ BMapCoordSys.create = function (ecModel, api) {
 
         // Set bmap options
         // centerAndZoom before layout and render
-        var center = bmapModel.get('center');
-        var zoom = bmapModel.get('zoom');
+        let center = bmapModel.get('center');
+        let zoom = bmapModel.get('zoom');
         if (center && zoom) {
-            var pt = new BMap.Point(center[0], center[1]);
+            let pt = new BMap.Point(center[0], center[1]);
             bmap.centerAndZoom(pt, zoom);
         }
 
diff --git a/extension-src/bmap/BMapModel.ts b/extension-src/bmap/BMapModel.ts
index fc2764a..382c26b 100644
--- a/extension-src/bmap/BMapModel.ts
+++ b/extension-src/bmap/BMapModel.ts
@@ -38,7 +38,7 @@ export default echarts.extendComponentModel({
     },
 
     centerOrZoomChanged: function (center, zoom) {
-        var option = this.option;
+        let option = this.option;
         return !(v2Equal(center, option.center) && zoom === option.zoom);
     },
 
diff --git a/extension-src/bmap/BMapView.ts b/extension-src/bmap/BMapView.ts
index 1093a0c..8e1ae2a 100644
--- a/extension-src/bmap/BMapView.ts
+++ b/extension-src/bmap/BMapView.ts
@@ -24,17 +24,17 @@ export default echarts.extendComponentView({
     type: 'bmap',
 
     render: function (bMapModel, ecModel, api) {
-        var rendering = true;
+        let rendering = true;
 
-        var bmap = bMapModel.getBMap();
-        var viewportRoot = api.getZr().painter.getViewportRoot();
-        var coordSys = bMapModel.coordinateSystem;
-        var moveHandler = function (type, target) {
+        let bmap = bMapModel.getBMap();
+        let viewportRoot = api.getZr().painter.getViewportRoot();
+        let coordSys = bMapModel.coordinateSystem;
+        let moveHandler = function (type, target) {
             if (rendering) {
                 return;
             }
-            var offsetEl = viewportRoot.parentNode.parentNode.parentNode;
-            var mapOffset = [
+            let offsetEl = viewportRoot.parentNode.parentNode.parentNode;
+            let mapOffset = [
                 -parseInt(offsetEl.style.left, 10) || 0,
                 -parseInt(offsetEl.style.top, 10) || 0
             ];
@@ -70,7 +70,7 @@ export default echarts.extendComponentView({
         this._oldMoveHandler = moveHandler;
         this._oldZoomEndHandler = zoomEndHandler;
 
-        var roam = bMapModel.get('roam');
+        let roam = bMapModel.get('roam');
         if (roam && roam !== 'scale') {
             bmap.enableDragging();
         }
@@ -89,11 +89,11 @@ export default echarts.extendComponentView({
         }
 
         /* map 2.0 */
-        var originalStyle = bMapModel.__mapStyle;
+        let originalStyle = bMapModel.__mapStyle;
 
-        var newMapStyle = bMapModel.get('mapStyle') || {};
+        let newMapStyle = bMapModel.get('mapStyle') || {};
         // FIXME, Not use JSON methods
-        var mapStyleStr = JSON.stringify(newMapStyle);
+        let mapStyleStr = JSON.stringify(newMapStyle);
         if (JSON.stringify(originalStyle) !== mapStyleStr) {
             // FIXME May have blank tile when dragging if setMapStyle
             if (Object.keys(newMapStyle).length) {
@@ -103,11 +103,11 @@ export default echarts.extendComponentView({
         }
 
         /* map 3.0 */
-        var originalStyle2 = bMapModel.__mapStyle2;
+        let originalStyle2 = bMapModel.__mapStyle2;
 
-        var newMapStyle2 = bMapModel.get('mapStyleV2') || {};
+        let newMapStyle2 = bMapModel.get('mapStyleV2') || {};
         // FIXME, Not use JSON methods
-        var mapStyleStr2 = JSON.stringify(newMapStyle2);
+        let mapStyleStr2 = JSON.stringify(newMapStyle2);
         if (JSON.stringify(originalStyle2) !== mapStyleStr2) {
             // FIXME May have blank tile when dragging if setMapStyle
             if (Object.keys(newMapStyle2).length) {
diff --git a/extension-src/bmap/bmap.ts b/extension-src/bmap/bmap.ts
index d73b935..991601b 100644
--- a/extension-src/bmap/bmap.ts
+++ b/extension-src/bmap/bmap.ts
@@ -37,10 +37,10 @@ echarts.registerAction({
     update: 'updateLayout'
 }, function (payload, ecModel) {
     ecModel.eachComponent('bmap', function (bMapModel) {
-        var bmap = bMapModel.getBMap();
-        var center = bmap.getCenter();
+        let bmap = bMapModel.getBMap();
+        let center = bmap.getCenter();
         bMapModel.setCenterAndZoom([center.lng, center.lat], bmap.getZoom());
     });
 });
 
-export var version = '1.0.0';
+export let version = '1.0.0';
diff --git a/extension-src/dataTool/gexf.ts b/extension-src/dataTool/gexf.ts
index 93fb990..30fbfe6 100644
--- a/extension-src/dataTool/gexf.ts
+++ b/extension-src/dataTool/gexf.ts
@@ -28,9 +28,9 @@
 import * as zrUtil from 'zrender/src/core/util';
 
 export function parse(xml) {
-    var doc;
+    let doc;
     if (typeof xml === 'string') {
-        var parser = new DOMParser();
+        let parser = new DOMParser();
         doc = parser.parseFromString(xml, 'text/xml');
     }
     else {
@@ -40,17 +40,17 @@ export function parse(xml) {
         return null;
     }
 
-    var gexfRoot = getChildByTagName(doc, 'gexf');
+    let gexfRoot = getChildByTagName(doc, 'gexf');
 
     if (!gexfRoot) {
         return null;
     }
 
-    var graphRoot = getChildByTagName(gexfRoot, 'graph');
+    let graphRoot = getChildByTagName(gexfRoot, 'graph');
 
-    var attributes = parseAttributes(getChildByTagName(graphRoot, 'attributes'));
-    var attributesMap = {};
-    for (var i = 0; i < attributes.length; i++) {
+    let attributes = parseAttributes(getChildByTagName(graphRoot, 'attributes'));
+    let attributesMap = {};
+    for (let i = 0; i < attributes.length; i++) {
         attributesMap[attributes[i].id] = attributes[i];
     }
 
@@ -73,10 +73,10 @@ function parseAttributes(parent) {
 function parseNodes(parent, attributesMap) {
     return parent ? zrUtil.map(getChildrenByTagName(parent, 'node'), function (nodeDom) {
 
-        var id = getAttr(nodeDom, 'id');
-        var label = getAttr(nodeDom, 'label');
+        let id = getAttr(nodeDom, 'id');
+        let label = getAttr(nodeDom, 'label');
 
-        var node = {
+        let node = {
             id: id,
             name: label,
             itemStyle: {
@@ -84,12 +84,12 @@ function parseNodes(parent, attributesMap) {
             }
         };
 
-        var vizSizeDom = getChildByTagName(nodeDom, 'viz:size');
-        var vizPosDom = getChildByTagName(nodeDom, 'viz:position');
-        var vizColorDom = getChildByTagName(nodeDom, 'viz:color');
-        // var vizShapeDom = getChildByTagName(nodeDom, 'viz:shape');
+        let vizSizeDom = getChildByTagName(nodeDom, 'viz:size');
+        let vizPosDom = getChildByTagName(nodeDom, 'viz:position');
+        let vizColorDom = getChildByTagName(nodeDom, 'viz:color');
+        // let vizShapeDom = getChildByTagName(nodeDom, 'viz:shape');
 
-        var attvaluesDom = getChildByTagName(nodeDom, 'attvalues');
+        let attvaluesDom = getChildByTagName(nodeDom, 'attvalues');
 
         if (vizSizeDom) {
             node.symbolSize = parseFloat(getAttr(vizSizeDom, 'value'));
@@ -110,15 +110,15 @@ function parseNodes(parent, attributesMap) {
             // node.shape = getAttr(vizShapeDom, 'shape');
         // }
         if (attvaluesDom) {
-            var attvalueDomList = getChildrenByTagName(attvaluesDom, 'attvalue');
+            let attvalueDomList = getChildrenByTagName(attvaluesDom, 'attvalue');
 
             node.attributes = {};
 
-            for (var j = 0; j < attvalueDomList.length; j++) {
-                var attvalueDom = attvalueDomList[j];
-                var attId = getAttr(attvalueDom, 'for');
-                var attValue = getAttr(attvalueDom, 'value');
-                var attribute = attributesMap[attId];
+            for (let j = 0; j < attvalueDomList.length; j++) {
+                let attvalueDom = attvalueDomList[j];
+                let attId = getAttr(attvalueDom, 'for');
+                let attValue = getAttr(attvalueDom, 'value');
+                let attribute = attributesMap[attId];
 
                 if (attribute) {
                     switch (attribute.type) {
@@ -146,13 +146,13 @@ function parseNodes(parent, attributesMap) {
 
 function parseEdges(parent) {
     return parent ? zrUtil.map(getChildrenByTagName(parent, 'edge'), function (edgeDom) {
-        var id = getAttr(edgeDom, 'id');
-        var label = getAttr(edgeDom, 'label');
+        let id = getAttr(edgeDom, 'id');
+        let label = getAttr(edgeDom, 'label');
 
-        var sourceId = getAttr(edgeDom, 'source');
-        var targetId = getAttr(edgeDom, 'target');
+        let sourceId = getAttr(edgeDom, 'source');
+        let targetId = getAttr(edgeDom, 'target');
 
-        var edge = {
+        let edge = {
             id: id,
             name: label,
             source: sourceId,
@@ -162,11 +162,11 @@ function parseEdges(parent) {
             }
         };
 
-        var lineStyle = edge.lineStyle.normal;
+        let lineStyle = edge.lineStyle.normal;
 
-        var vizThicknessDom = getChildByTagName(edgeDom, 'viz:thickness');
-        var vizColorDom = getChildByTagName(edgeDom, 'viz:color');
-        // var vizShapeDom = getChildByTagName(edgeDom, 'viz:shape');
+        let vizThicknessDom = getChildByTagName(edgeDom, 'viz:thickness');
+        let vizColorDom = getChildByTagName(edgeDom, 'viz:color');
+        // let vizShapeDom = getChildByTagName(edgeDom, 'viz:shape');
 
         if (vizThicknessDom) {
             lineStyle.width = parseFloat(vizThicknessDom.getAttribute('value'));
@@ -191,7 +191,7 @@ function getAttr(el, attrName) {
 }
 
 function getChildByTagName(parent, tagName) {
-    var node = parent.firstChild;
+    let node = parent.firstChild;
 
     while (node) {
         if (
@@ -209,8 +209,8 @@ function getChildByTagName(parent, tagName) {
 }
 
 function getChildrenByTagName(parent, tagName) {
-    var node = parent.firstChild;
-    var children = [];
+    let node = parent.firstChild;
+    let children = [];
     while (node) {
         if (node.nodeName.toLowerCase() === tagName.toLowerCase()) {
             children.push(node);
diff --git a/extension-src/dataTool/index.ts b/extension-src/dataTool/index.ts
index 773aa74..c4c1914 100644
--- a/extension-src/dataTool/index.ts
+++ b/extension-src/dataTool/index.ts
@@ -22,7 +22,7 @@ import * as echarts from 'echarts';
 import * as gexf from './gexf';
 import prepareBoxplotData from './prepareBoxplotData';
 
-export var version = '1.0.0';
+export let version = '1.0.0';
 
 export {gexf};
 
diff --git a/extension-src/dataTool/prepareBoxplotData.ts b/extension-src/dataTool/prepareBoxplotData.ts
index 06ed451..e7f8edd 100644
--- a/extension-src/dataTool/prepareBoxplotData.ts
+++ b/extension-src/dataTool/prepareBoxplotData.ts
@@ -48,37 +48,37 @@ import * as numberUtil from '../../src/util/number';
  */
 export default function (rawData, opt) {
     opt = opt || [];
-    var boxData = [];
-    var outliers = [];
-    var axisData = [];
-    var boundIQR = opt.boundIQR;
-    var useExtreme = boundIQR === 'none' || boundIQR === 0;
+    let boxData = [];
+    let outliers = [];
+    let axisData = [];
+    let boundIQR = opt.boundIQR;
+    let useExtreme = boundIQR === 'none' || boundIQR === 0;
 
-    for (var i = 0; i < rawData.length; i++) {
+    for (let i = 0; i < rawData.length; i++) {
         axisData.push(i + '');
-        var ascList = numberUtil.asc(rawData[i].slice());
+        let ascList = numberUtil.asc(rawData[i].slice());
 
-        var Q1 = numberUtil.quantile(ascList, 0.25);
-        var Q2 = numberUtil.quantile(ascList, 0.5);
-        var Q3 = numberUtil.quantile(ascList, 0.75);
-        var min = ascList[0];
-        var max = ascList[ascList.length - 1];
+        let Q1 = numberUtil.quantile(ascList, 0.25);
+        let Q2 = numberUtil.quantile(ascList, 0.5);
+        let Q3 = numberUtil.quantile(ascList, 0.75);
+        let min = ascList[0];
+        let max = ascList[ascList.length - 1];
 
-        var bound = (boundIQR == null ? 1.5 : boundIQR) * (Q3 - Q1);
+        let bound = (boundIQR == null ? 1.5 : boundIQR) * (Q3 - Q1);
 
-        var low = useExtreme
+        let low = useExtreme
             ? min
             : Math.max(min, Q1 - bound);
-        var high = useExtreme
+        let high = useExtreme
             ? max
             : Math.min(max, Q3 + bound);
 
         boxData.push([low, Q1, Q2, Q3, high]);
 
-        for (var j = 0; j < ascList.length; j++) {
-            var dataItem = ascList[j];
+        for (let j = 0; j < ascList.length; j++) {
+            let dataItem = ascList[j];
             if (dataItem < low || dataItem > high) {
-                var outlier = [i, dataItem];
+                let outlier = [i, dataItem];
                 opt.layout === 'vertical' && outlier.reverse();
                 outliers.push(outlier);
             }
diff --git a/src/.eslintrc.yaml b/src/.eslintrc.yaml
index d060c39..1b663c4 100644
--- a/src/.eslintrc.yaml
+++ b/src/.eslintrc.yaml
@@ -80,7 +80,7 @@ rules:
     no-undef: 2
     no-undef-init: 2
     "no-use-before-define": "off"
-    "@typescript-eslint/no-use-before-define": 2
+    "@typescript-eslint/no-use-before-define": 0
     brace-style:
         - 2
         - "stroustrup"
@@ -184,7 +184,7 @@ rules:
     no-const-assign: 2
     # no-dupe-class-members: 2
     no-this-before-super: 0
-    no-var: 0
+    no-var: 2
     no-duplicate-imports: 2
     prefer-rest-params: 0
     unicode-bom: 2
diff --git a/src/CoordinateSystem.ts b/src/CoordinateSystem.ts
index fc8b8e8..c9eec89 100644
--- a/src/CoordinateSystem.ts
+++ b/src/CoordinateSystem.ts
@@ -22,16 +22,16 @@ import GlobalModel from './model/Global';
 import ExtensionAPI from './ExtensionAPI';
 import { CoordinateSystemCreator, CoordinateSystemMaster } from './coord/CoordinateSystem';
 
-var coordinateSystemCreators: {[type: string]: CoordinateSystemCreator} = {};
+const coordinateSystemCreators: {[type: string]: CoordinateSystemCreator} = {};
 
 class CoordinateSystemManager {
 
     private _coordinateSystems: CoordinateSystemMaster[] = [];
 
     create(ecModel: GlobalModel, api: ExtensionAPI): void {
-        var coordinateSystems: CoordinateSystemMaster[] = [];
+        let coordinateSystems: CoordinateSystemMaster[] = [];
         zrUtil.each(coordinateSystemCreators, function (creater, type) {
-            var list = creater.create(ecModel, api);
+            let list = creater.create(ecModel, api);
             coordinateSystems = coordinateSystems.concat(list || []);
         });
 
diff --git a/src/ExtensionAPI.ts b/src/ExtensionAPI.ts
index 37dc6c3..dae64dd 100644
--- a/src/ExtensionAPI.ts
+++ b/src/ExtensionAPI.ts
@@ -23,7 +23,7 @@ import {CoordinateSystemMaster} from './coord/CoordinateSystem';
 import Element from 'zrender/src/Element';
 import ComponentModel from './model/Component';
 
-var availableMethods = {
+const availableMethods = {
     getDom: 1,
     getZr: 1,
     getWidth: 1,
diff --git a/src/action/geoRoam.ts b/src/action/geoRoam.ts
index c42b2a3..33c9b7e 100644
--- a/src/action/geoRoam.ts
+++ b/src/action/geoRoam.ts
@@ -38,17 +38,17 @@ echarts.registerAction({
     event: 'geoRoam',
     update: 'updateTransform'
 }, function (payload, ecModel) {
-    var componentType = payload.componentType || 'series';
+    let componentType = payload.componentType || 'series';
 
     ecModel.eachComponent(
         { mainType: componentType, query: payload },
         function (componentModel) {
-            var geo = componentModel.coordinateSystem;
+            let geo = componentModel.coordinateSystem;
             if (geo.type !== 'geo') {
                 return;
             }
 
-            var res = updateCenterAndZoom(
+            let res = updateCenterAndZoom(
                 geo, payload, componentModel.get('scaleLimit')
             );
 
diff --git a/src/action/roamHelper.ts b/src/action/roamHelper.ts
index 8b2bf1e..e1e7ad0 100644
--- a/src/action/roamHelper.ts
+++ b/src/action/roamHelper.ts
@@ -36,11 +36,11 @@ export function updateCenterAndZoom(
         max?: number
     }
 ) {
-    var previousZoom = view.getZoom();
+    let previousZoom = view.getZoom();
     let center = view.getCenter();
-    var zoom = payload.zoom;
+    let zoom = payload.zoom;
 
-    var point = view.dataToPoint(center);
+    let point = view.dataToPoint(center);
 
     if (payload.dx != null && payload.dy != null) {
         point[0] -= payload.dx;
@@ -50,8 +50,8 @@ export function updateCenterAndZoom(
     }
     if (zoom != null) {
         if (zoomLimit) {
-            var zoomMin = zoomLimit.min || 0;
-            var zoomMax = zoomLimit.max || Infinity;
+            let zoomMin = zoomLimit.min || 0;
+            let zoomMax = zoomLimit.max || Infinity;
             zoom = Math.max(
                 Math.min(previousZoom * zoom, zoomMax),
                 zoomMin
@@ -61,9 +61,9 @@ export function updateCenterAndZoom(
         // Zoom on given point(originX, originY)
         view.scale[0] *= zoom;
         view.scale[1] *= zoom;
-        var position = view.position;
-        var fixX = (payload.originX - position[0]) * (zoom - 1);
-        var fixY = (payload.originY - position[1]) * (zoom - 1);
+        let position = view.position;
+        let fixX = (payload.originX - position[0]) * (zoom - 1);
+        let fixY = (payload.originY - position[1]) * (zoom - 1);
 
         position[0] -= fixX;
         position[1] -= fixY;
diff --git a/src/chart/bar/BarSeries.ts b/src/chart/bar/BarSeries.ts
index bb494f5..5df7fe5 100644
--- a/src/chart/bar/BarSeries.ts
+++ b/src/chart/bar/BarSeries.ts
@@ -105,8 +105,8 @@ class BarSeriesModel extends BaseBarSeriesModel<BarSeriesOption> {
      */
     getProgressiveThreshold() {
         // Do not support progressive in normal mode.
-        var progressiveThreshold = this.get('progressiveThreshold');
-        var largeThreshold = this.get('largeThreshold');
+        let progressiveThreshold = this.get('progressiveThreshold');
+        let largeThreshold = this.get('largeThreshold');
         if (largeThreshold > progressiveThreshold) {
             progressiveThreshold = largeThreshold;
         }
diff --git a/src/chart/bar/BarView.ts b/src/chart/bar/BarView.ts
index 4fee71c..0342978 100644
--- a/src/chart/bar/BarView.ts
+++ b/src/chart/bar/BarView.ts
@@ -59,12 +59,12 @@ function getClipArea(coord: CoordSysOfBar, data: List) {
     let coordSysClipArea;
     if (isCoordinateSystemType<Cartesian2D>(coord, 'cartesian2d')) {
         coordSysClipArea = coord.getArea && coord.getArea();
-        var baseAxis = coord.getBaseAxis();
+        let baseAxis = coord.getBaseAxis();
         // When boundaryGap is false or using time axis. bar may exceed the grid.
         // We should not clip this part.
         // See test/bar2.html
         if (baseAxis.type !== 'category' || !baseAxis.onBand) {
-            var expandWidth = data.getLayout('bandWidth');
+            let expandWidth = data.getLayout('bandWidth');
             if (baseAxis.isHorizontal()) {
                 coordSysClipArea.x -= expandWidth;
                 coordSysClipArea.width += expandWidth * 2;
@@ -95,7 +95,7 @@ class BarView extends ChartView {
     render(seriesModel: BarSeriesModel, ecModel: GlobalModel, api: ExtensionAPI) {
         this._updateDrawMode(seriesModel);
 
-        var coordinateSystemType = seriesModel.get('coordinateSystem');
+        let coordinateSystemType = seriesModel.get('coordinateSystem');
 
         if (coordinateSystemType === 'cartesian2d'
             || coordinateSystemType === 'polar'
@@ -123,7 +123,7 @@ class BarView extends ChartView {
     }
 
     _updateDrawMode(seriesModel: BarSeriesModel) {
-        var isLargeDraw = seriesModel.pipelineContext.large;
+        let isLargeDraw = seriesModel.pipelineContext.large;
         if (this._isLargeDraw == null || isLargeDraw !== this._isLargeDraw) {
             this._isLargeDraw = isLargeDraw;
             this._clear();
@@ -131,13 +131,13 @@ class BarView extends ChartView {
     }
 
     _renderNormal(seriesModel: BarSeriesModel, ecModel: GlobalModel, api: ExtensionAPI) {
-        var group = this.group;
-        var data = seriesModel.getData();
-        var oldData = this._data;
+        let group = this.group;
+        let data = seriesModel.getData();
+        let oldData = this._data;
 
-        var coord = seriesModel.coordinateSystem;
-        var baseAxis = coord.getBaseAxis();
-        var isHorizontalOrRadial: boolean;
+        let coord = seriesModel.coordinateSystem;
+        let baseAxis = coord.getBaseAxis();
+        let isHorizontalOrRadial: boolean;
 
         if (coord.type === 'cartesian2d') {
             isHorizontalOrRadial = (baseAxis as Axis2D).isHorizontal();
@@ -146,30 +146,30 @@ class BarView extends ChartView {
             isHorizontalOrRadial = baseAxis.dim === 'angle';
         }
 
-        var animationModel = seriesModel.isAnimationEnabled() ? seriesModel : null;
+        let animationModel = seriesModel.isAnimationEnabled() ? seriesModel : null;
 
-        var needsClip = seriesModel.get('clip', true);
-        var coordSysClipArea = getClipArea(coord, data);
+        let needsClip = seriesModel.get('clip', true);
+        let coordSysClipArea = getClipArea(coord, data);
         // If there is clipPath created in large mode. Remove it.
         group.removeClipPath();
         // We don't use clipPath in normal mode because we needs a perfect animation
         // And don't want the label are clipped.
 
-        var roundCap = seriesModel.get('roundCap', true);
+        let roundCap = seriesModel.get('roundCap', true);
 
-        var drawBackground = seriesModel.get('showBackground', true);
-        var backgroundModel = seriesModel.getModel('backgroundStyle');
+        let drawBackground = seriesModel.get('showBackground', true);
+        let backgroundModel = seriesModel.getModel('backgroundStyle');
 
-        var bgEls: BarView['_backgroundEls'] = [];
-        var oldBgEls = this._backgroundEls;
+        let bgEls: BarView['_backgroundEls'] = [];
+        let oldBgEls = this._backgroundEls;
 
         data.diff(oldData)
             .add(function (dataIndex) {
-                var itemModel = data.getItemModel(dataIndex);
-                var layout = getLayout[coord.type](data, dataIndex, itemModel);
+                let itemModel = data.getItemModel(dataIndex);
+                let layout = getLayout[coord.type](data, dataIndex, itemModel);
 
                 if (drawBackground) {
-                    var bgEl = createBackgroundEl(
+                    let bgEl = createBackgroundEl(
                         coord, isHorizontalOrRadial, layout
                     );
                     bgEl.useStyle(getBarItemStyle(backgroundModel));
@@ -184,14 +184,14 @@ class BarView extends ChartView {
                 if (needsClip) {
                     // Clip will modify the layout params.
                     // And return a boolean to determine if the shape are fully clipped.
-                    var isClipped = clip[coord.type](coordSysClipArea, layout);
+                    let isClipped = clip[coord.type](coordSysClipArea, layout);
                     if (isClipped) {
                         // group.remove(el);
                         return;
                     }
                 }
 
-                var el = elementCreator[coord.type](
+                let el = elementCreator[coord.type](
                     dataIndex, layout, isHorizontalOrRadial, animationModel, false, roundCap
                 );
                 data.setItemGraphicEl(dataIndex, el);
@@ -203,28 +203,28 @@ class BarView extends ChartView {
                 );
             })
             .update(function (newIndex, oldIndex) {
-                var itemModel = data.getItemModel(newIndex);
-                var layout = getLayout[coord.type](data, newIndex, itemModel);
+                let itemModel = data.getItemModel(newIndex);
+                let layout = getLayout[coord.type](data, newIndex, itemModel);
 
                 if (drawBackground) {
-                    var bgEl = oldBgEls[oldIndex];
+                    let bgEl = oldBgEls[oldIndex];
                     bgEl.useStyle(getBarItemStyle(backgroundModel));
                     bgEls[newIndex] = bgEl;
 
-                    var shape = createBackgroundShape(isHorizontalOrRadial, layout, coord);
+                    let shape = createBackgroundShape(isHorizontalOrRadial, layout, coord);
                     updateProps(
                         bgEl as Path, { shape: shape }, animationModel, newIndex
                     );
                 }
 
-                var el = oldData.getItemGraphicEl(oldIndex) as BarPossiblePath;
+                let el = oldData.getItemGraphicEl(oldIndex) as BarPossiblePath;
                 if (!data.hasValue(newIndex)) {
                     group.remove(el);
                     return;
                 }
 
                 if (needsClip) {
-                    var isClipped = clip[coord.type](coordSysClipArea, layout);
+                    let isClipped = clip[coord.type](coordSysClipArea, layout);
                     if (isClipped) {
                         group.remove(el);
                         return;
@@ -252,7 +252,7 @@ class BarView extends ChartView {
                 );
             })
             .remove(function (dataIndex) {
-                var el = oldData.getItemGraphicEl(dataIndex);
+                let el = oldData.getItemGraphicEl(dataIndex);
                 if (coord.type === 'cartesian2d') {
                     el && removeRect(dataIndex, animationModel, el as Rect);
                 }
@@ -262,10 +262,10 @@ class BarView extends ChartView {
             })
             .execute();
 
-        var bgGroup = this._backgroundGroup || (this._backgroundGroup = new Group());
+        let bgGroup = this._backgroundGroup || (this._backgroundGroup = new Group());
         bgGroup.removeAll();
 
-        for (var i = 0; i < bgEls.length; ++i) {
+        for (let i = 0; i < bgEls.length; ++i) {
             bgGroup.add(bgEls[i]);
         }
         group.add(bgGroup);
@@ -279,7 +279,7 @@ class BarView extends ChartView {
         createLarge(seriesModel, this.group);
 
         // Use clipPath in large mode.
-        var clipPath = seriesModel.get('clip', true)
+        let clipPath = seriesModel.get('clip', true)
             ? createClipPath(seriesModel.coordinateSystem, false, seriesModel)
             : null;
         if (clipPath) {
@@ -300,8 +300,8 @@ class BarView extends ChartView {
     }
 
     _clear(ecModel?: GlobalModel) {
-        var group = this.group;
-        var data = this._data;
+        let group = this.group;
+        let data = this._data;
         if (ecModel && ecModel.get('animation') && data && !this._isLargeDraw) {
             this._removeBackground();
             this._backgroundEls = [];
@@ -334,8 +334,8 @@ const clip: {
     [key in 'cartesian2d' | 'polar']: Clipper
 } = {
     cartesian2d(coordSysBoundingRect: RectLike, layout: Rect['shape']) {
-        var signWidth = layout.width < 0 ? -1 : 1;
-        var signHeight = layout.height < 0 ? -1 : 1;
+        let signWidth = layout.width < 0 ? -1 : 1;
+        let signHeight = layout.height < 0 ? -1 : 1;
         // Needs positive width and height
         if (signWidth < 0) {
             layout.x += layout.width;
@@ -346,17 +346,17 @@ const clip: {
             layout.height = -layout.height;
         }
 
-        var x = mathMax(layout.x, coordSysBoundingRect.x);
-        var x2 = mathMin(layout.x + layout.width, coordSysBoundingRect.x + coordSysBoundingRect.width);
-        var y = mathMax(layout.y, coordSysBoundingRect.y);
-        var y2 = mathMin(layout.y + layout.height, coordSysBoundingRect.y + coordSysBoundingRect.height);
+        let x = mathMax(layout.x, coordSysBoundingRect.x);
+        let x2 = mathMin(layout.x + layout.width, coordSysBoundingRect.x + coordSysBoundingRect.width);
+        let y = mathMax(layout.y, coordSysBoundingRect.y);
+        let y2 = mathMin(layout.y + layout.height, coordSysBoundingRect.y + coordSysBoundingRect.height);
 
         layout.x = x;
         layout.y = y;
         layout.width = x2 - x;
         layout.height = y2 - y;
 
-        var clipped = layout.width < 0 || layout.height < 0;
+        let clipped = layout.width < 0 || layout.height < 0;
 
         // Reverse back
         if (signWidth < 0) {
@@ -391,7 +391,7 @@ const elementCreator: {
         dataIndex, layout: RectLayout, isHorizontal,
         animationModel, isUpdate
     ) {
-        var rect = new Rect({
+        let rect = new Rect({
             shape: zrUtil.extend({}, layout),
             z2: 1
         });
@@ -400,9 +400,9 @@ const elementCreator: {
 
         // Animation
         if (animationModel) {
-            var rectShape = rect.shape;
-            var animateProperty = isHorizontal ? 'height' : 'width' as 'width' | 'height';
-            var animateTarget = {} as RectShape;
+            let rectShape = rect.shape;
+            let animateProperty = isHorizontal ? 'height' : 'width' as 'width' | 'height';
+            let animateTarget = {} as RectShape;
             rectShape[animateProperty] = 0;
             animateTarget[animateProperty] = layout[animateProperty];
             (isUpdate ? updateProps : initProps)(rect, {
@@ -421,11 +421,11 @@ const elementCreator: {
         // direction. Notice that if clockwise is true (by default), the sector
         // will always draw clockwisely, no matter whether endAngle is greater
         // or less than startAngle.
-        var clockwise = layout.startAngle < layout.endAngle;
+        let clockwise = layout.startAngle < layout.endAngle;
 
-        var ShapeClass = (!isRadial && roundCap) ? Sausage : Sector;
+        let ShapeClass = (!isRadial && roundCap) ? Sausage : Sector;
 
-        var sector = new ShapeClass({
+        let sector = new ShapeClass({
             shape: zrUtil.defaults({clockwise: clockwise}, layout),
             z2: 1
         });
@@ -434,9 +434,9 @@ const elementCreator: {
 
         // Animation
         if (animationModel) {
-            var sectorShape = sector.shape;
-            var animateProperty = isRadial ? 'r' : 'endAngle' as 'r' | 'endAngle';
-            var animateTarget = {} as SectorShape;
+            let sectorShape = sector.shape;
+            let animateProperty = isRadial ? 'r' : 'endAngle' as 'r' | 'endAngle';
+            let animateTarget = {} as SectorShape;
             sectorShape[animateProperty] = isRadial ? 0 : layout.startAngle;
             animateTarget[animateProperty] = layout[animateProperty];
             (isUpdate ? updateProps : initProps)(sector, {
@@ -487,12 +487,12 @@ const getLayout: {
     [key in 'cartesian2d' | 'polar']: GetLayout
 } = {
     cartesian2d(data, dataIndex, itemModel): RectLayout {
-        var layout = data.getItemLayout(dataIndex) as RectLayout;
-        var fixedLineWidth = getLineWidth(itemModel, layout);
+        let layout = data.getItemLayout(dataIndex) as RectLayout;
+        let fixedLineWidth = getLineWidth(itemModel, layout);
 
         // fix layout with lineWidth
-        var signX = layout.width > 0 ? 1 : -1;
-        var signY = layout.height > 0 ? 1 : -1;
+        let signX = layout.width > 0 ? 1 : -1;
+        let signY = layout.height > 0 ? 1 : -1;
         return {
             x: layout.x + signX * fixedLineWidth / 2,
             y: layout.y + signY * fixedLineWidth / 2,
@@ -502,7 +502,7 @@ const getLayout: {
     },
 
     polar(data, dataIndex, itemModel): SectorLayout {
-        var layout = data.getItemLayout(dataIndex);
+        let layout = data.getItemLayout(dataIndex);
         return {
             cx: layout.cx,
             cy: layout.cy,
@@ -529,11 +529,11 @@ function updateStyle(
     isHorizontal: boolean,
     isPolar: boolean
 ) {
-    var color = data.getItemVisual(dataIndex, 'color');
-    var opacity = data.getItemVisual(dataIndex, 'opacity');
-    var stroke = data.getVisual('borderColor');
-    var itemStyleModel = itemModel.getModel('itemStyle');
-    var hoverStyle = getBarItemStyle(itemModel.getModel(['emphasis', 'itemStyle']));
+    let color = data.getItemVisual(dataIndex, 'color');
+    let opacity = data.getItemVisual(dataIndex, 'opacity');
+    let stroke = data.getVisual('borderColor');
+    let itemStyleModel = itemModel.getModel('itemStyle');
+    let hoverStyle = getBarItemStyle(itemModel.getModel(['emphasis', 'itemStyle']));
 
     if (!isPolar) {
         el.setShape('r', itemStyleModel.get('barBorderRadius') || 0);
@@ -548,11 +548,11 @@ function updateStyle(
         getBarItemStyle(itemStyleModel)
     ));
 
-    var cursorStyle = itemModel.getShallow('cursor');
+    let cursorStyle = itemModel.getShallow('cursor');
     cursorStyle && el.attr('cursor', cursorStyle);
 
     if (!isPolar) {
-        var labelPositionOutside = isHorizontal
+        let labelPositionOutside = isHorizontal
             ? ((layout as RectLayout).height > 0 ? 'bottom' : 'top')
             : ((layout as RectLayout).width > 0 ? 'left' : 'right');
 
@@ -572,10 +572,10 @@ function getLineWidth(
     itemModel: Model<BarSeriesOption>,
     rawLayout: RectLayout
 ) {
-    var lineWidth = itemModel.get(BAR_BORDER_WIDTH_QUERY) || 0;
+    let lineWidth = itemModel.get(BAR_BORDER_WIDTH_QUERY) || 0;
     // width or height may be NaN for empty data
-    var width = isNaN(rawLayout.width) ? Number.MAX_VALUE : Math.abs(rawLayout.width);
-    var height = isNaN(rawLayout.height) ? Number.MAX_VALUE : Math.abs(rawLayout.height);
+    let width = isNaN(rawLayout.width) ? Number.MAX_VALUE : Math.abs(rawLayout.width);
+    let height = isNaN(rawLayout.height) ? Number.MAX_VALUE : Math.abs(rawLayout.height);
     return Math.min(lineWidth, width, height);
 }
 
@@ -606,7 +606,7 @@ class LargePath extends Path {
         const startPoint = this.__startPoint;
         const baseDimIdx = this.__baseDimIdx;
 
-        for (var i = 0; i < points.length; i += 2) {
+        for (let i = 0; i < points.length; i += 2) {
             startPoint[baseDimIdx] = points[i + baseDimIdx];
             ctx.moveTo(startPoint[0], startPoint[1]);
             ctx.lineTo(points[i], points[i + 1]);
@@ -620,16 +620,16 @@ function createLarge(
     incremental?: boolean
 ) {
     // TODO support polar
-    var data = seriesModel.getData();
-    var startPoint = [];
-    var baseDimIdx = data.getLayout('valueAxisHorizontal') ? 1 : 0;
+    let data = seriesModel.getData();
+    let startPoint = [];
+    let baseDimIdx = data.getLayout('valueAxisHorizontal') ? 1 : 0;
     startPoint[1 - baseDimIdx] = data.getLayout('valueAxisStart');
 
-    var largeDataIndices = data.getLayout('largeDataIndices');
-    var barWidth = data.getLayout('barWidth');
+    let largeDataIndices = data.getLayout('largeDataIndices');
+    let barWidth = data.getLayout('barWidth');
 
-    var backgroundModel = seriesModel.getModel('backgroundStyle');
-    var drawBackground = seriesModel.get('showBackground', true);
+    let backgroundModel = seriesModel.getModel('backgroundStyle');
+    let drawBackground = seriesModel.get('showBackground', true);
 
     if (drawBackground) {
         const points = data.getLayout('largeBackgroundPoints');
@@ -650,7 +650,7 @@ function createLarge(
         group.add(bgEl);
     }
 
-    var el = new LargePath({
+    let el = new LargePath({
         shape: {points: data.getLayout('largePoints')},
         incremental: !!incremental
     });
@@ -672,30 +672,30 @@ function createLarge(
 
 // Use throttle to avoid frequently traverse to find dataIndex.
 const largePathUpdateDataIndex = throttle(function (this: LargePath, event: ZRElementEvent) {
-    var largePath = this;
-    var dataIndex = largePathFindDataIndex(largePath, event.offsetX, event.offsetY);
+    let largePath = this;
+    let dataIndex = largePathFindDataIndex(largePath, event.offsetX, event.offsetY);
     getECData(largePath).dataIndex = dataIndex >= 0 ? dataIndex : null;
 }, 30, false);
 
 function largePathFindDataIndex(largePath: LargePath, x: number, y: number) {
-    var baseDimIdx = largePath.__baseDimIdx;
-    var valueDimIdx = 1 - baseDimIdx;
-    var points = largePath.shape.points;
-    var largeDataIndices = largePath.__largeDataIndices;
-    var barWidthHalf = Math.abs(largePath.__barWidth / 2);
-    var startValueVal = largePath.__startPoint[valueDimIdx];
+    let baseDimIdx = largePath.__baseDimIdx;
+    let valueDimIdx = 1 - baseDimIdx;
+    let points = largePath.shape.points;
+    let largeDataIndices = largePath.__largeDataIndices;
+    let barWidthHalf = Math.abs(largePath.__barWidth / 2);
+    let startValueVal = largePath.__startPoint[valueDimIdx];
 
     _eventPos[0] = x;
     _eventPos[1] = y;
-    var pointerBaseVal = _eventPos[baseDimIdx];
-    var pointerValueVal = _eventPos[1 - baseDimIdx];
-    var baseLowerBound = pointerBaseVal - barWidthHalf;
-    var baseUpperBound = pointerBaseVal + barWidthHalf;
-
-    for (var i = 0, len = points.length / 2; i < len; i++) {
-        var ii = i * 2;
-        var barBaseVal = points[ii + baseDimIdx];
-        var barValueVal = points[ii + valueDimIdx];
+    let pointerBaseVal = _eventPos[baseDimIdx];
+    let pointerValueVal = _eventPos[1 - baseDimIdx];
+    let baseLowerBound = pointerBaseVal - barWidthHalf;
+    let baseUpperBound = pointerBaseVal + barWidthHalf;
+
+    for (let i = 0, len = points.length / 2; i < len; i++) {
+        let ii = i * 2;
+        let barBaseVal = points[ii + baseDimIdx];
+        let barValueVal = points[ii + valueDimIdx];
         if (
             barBaseVal >= baseLowerBound && barBaseVal <= baseUpperBound
             && (
@@ -716,8 +716,8 @@ function setLargeStyle(
     seriesModel: BarSeriesModel,
     data: List
 ) {
-    var borderColor = data.getVisual('borderColor') || data.getVisual('color');
-    var itemStyle = seriesModel.getModel('itemStyle').getItemStyle(['color', 'borderColor']);
+    let borderColor = data.getVisual('borderColor') || data.getVisual('color');
+    let itemStyle = seriesModel.getModel('itemStyle').getItemStyle(['color', 'borderColor']);
 
     el.useStyle(itemStyle);
     el.style.fill = null;
@@ -730,8 +730,8 @@ function setLargeBackgroundStyle(
     backgroundModel: Model<BarSeriesOption['backgroundStyle']>,
     data: List
 ) {
-    var borderColor = backgroundModel.get('borderColor') || backgroundModel.get('color');
-    var itemStyle = backgroundModel.getItemStyle(['color', 'borderColor']);
+    let borderColor = backgroundModel.get('borderColor') || backgroundModel.get('color');
+    let itemStyle = backgroundModel.getItemStyle(['color', 'borderColor']);
 
     el.useStyle(itemStyle);
     el.style.fill = null;
@@ -773,7 +773,7 @@ function createBackgroundEl(
     isHorizontalOrRadial: boolean,
     layout: SectorLayout | RectLayout
 ): Rect | Sector {
-    var ElementClz = coord.type === 'polar' ? Sector : Rect;
+    let ElementClz = coord.type === 'polar' ? Sector : Rect;
     return new ElementClz({
         shape: createBackgroundShape(isHorizontalOrRadial, layout, coord) as any,
         silent: true,
diff --git a/src/chart/bar/BaseBarSeries.ts b/src/chart/bar/BaseBarSeries.ts
index de54e03..a0290d3 100644
--- a/src/chart/bar/BaseBarSeries.ts
+++ b/src/chart/bar/BaseBarSeries.ts
@@ -87,14 +87,14 @@ class BaseBarSeriesModel<Opts extends BaseBarSeriesOption = BaseBarSeriesOption>
     }
 
     getMarkerPosition(value: ScaleDataValue[]) {
-        var coordSys = this.coordinateSystem;
+        let coordSys = this.coordinateSystem;
         if (coordSys) {
             // PENDING if clamp ?
-            var pt = coordSys.dataToPoint(coordSys.clampData(value));
-            var data = this.getData();
-            var offset = data.getLayout('offset');
-            var size = data.getLayout('size');
-            var offsetIndex = (coordSys as Cartesian2D).getBaseAxis().isHorizontal() ? 0 : 1;
+            let pt = coordSys.dataToPoint(coordSys.clampData(value));
+            let data = this.getData();
+            let offset = data.getLayout('offset');
+            let size = data.getLayout('size');
+            let offsetIndex = (coordSys as Cartesian2D).getBaseAxis().isHorizontal() ? 0 : 1;
             pt[offsetIndex] += offset + size / 2;
             return pt;
         }
diff --git a/src/chart/bar/PictorialBarView.ts b/src/chart/bar/PictorialBarView.ts
index b65e0bc..a91fcf9 100644
--- a/src/chart/bar/PictorialBarView.ts
+++ b/src/chart/bar/PictorialBarView.ts
@@ -35,15 +35,15 @@ import type Axis2D from '../../coord/cartesian/Axis2D';
 import type Element from 'zrender/src/Element';
 
 
-var BAR_BORDER_WIDTH_QUERY = ['itemStyle', 'borderWidth'] as const;
+const BAR_BORDER_WIDTH_QUERY = ['itemStyle', 'borderWidth'] as const;
 
 // index: +isHorizontal
-var LAYOUT_ATTRS = [
+const LAYOUT_ATTRS = [
     {xy: 'x', wh: 'width', index: 0, posDesc: ['left', 'right']},
     {xy: 'y', wh: 'height', index: 1, posDesc: ['top', 'bottom']}
 ] as const;
 
-var pathForLineWidth = new graphic.Circle();
+const pathForLineWidth = new graphic.Circle();
 
 type ItemModel = Model<PictorialBarDataItemOption> & {
     getAnimationDelayParams(path: any): {index: number, count: number}
@@ -132,16 +132,16 @@ class PictorialBarView extends ChartView {
         ecModel: GlobalModel,
         api: ExtensionAPI
     ) {
-        var group = this.group;
-        var data = seriesModel.getData();
-        var oldData = this._data;
+        let group = this.group;
+        let data = seriesModel.getData();
+        let oldData = this._data;
 
-        var cartesian = seriesModel.coordinateSystem;
-        var baseAxis = cartesian.getBaseAxis();
-        var isHorizontal = baseAxis.isHorizontal();
-        var coordSysRect = cartesian.grid.getRect();
+        let cartesian = seriesModel.coordinateSystem;
+        let baseAxis = cartesian.getBaseAxis();
+        let isHorizontal = baseAxis.isHorizontal();
+        let coordSysRect = cartesian.grid.getRect();
 
-        var opt: CreateOpts = {
+        let opt: CreateOpts = {
             ecSize: {width: api.getWidth(), height: api.getHeight()},
             seriesModel: seriesModel,
             coordSys: cartesian,
@@ -160,10 +160,10 @@ class PictorialBarView extends ChartView {
                     return;
                 }
 
-                var itemModel = getItemModel(data, dataIndex);
-                var symbolMeta = getSymbolMeta(data, dataIndex, itemModel, opt);
+                let itemModel = getItemModel(data, dataIndex);
+                let symbolMeta = getSymbolMeta(data, dataIndex, itemModel, opt);
 
-                var bar = createBar(data, opt, symbolMeta);
+                let bar = createBar(data, opt, symbolMeta);
 
                 data.setItemGraphicEl(dataIndex, bar);
                 group.add(bar);
@@ -171,17 +171,17 @@ class PictorialBarView extends ChartView {
                 updateCommon(bar, opt, symbolMeta);
             })
             .update(function (newIndex, oldIndex) {
-                var bar = oldData.getItemGraphicEl(oldIndex) as PictorialBarElement;
+                let bar = oldData.getItemGraphicEl(oldIndex) as PictorialBarElement;
 
                 if (!data.hasValue(newIndex)) {
                     group.remove(bar);
                     return;
                 }
 
-                var itemModel = getItemModel(data, newIndex);
-                var symbolMeta = getSymbolMeta(data, newIndex, itemModel, opt);
+                let itemModel = getItemModel(data, newIndex);
+                let symbolMeta = getSymbolMeta(data, newIndex, itemModel, opt);
 
-                var pictorialShapeStr = getShapeStr(data, symbolMeta);
+                let pictorialShapeStr = getShapeStr(data, symbolMeta);
                 if (bar && pictorialShapeStr !== bar.__pictorialShapeStr) {
                     group.remove(bar);
                     data.setItemGraphicEl(newIndex, null);
@@ -203,7 +203,7 @@ class PictorialBarView extends ChartView {
                 updateCommon(bar, opt, symbolMeta);
             })
             .remove(function (dataIndex) {
-                var bar = oldData.getItemGraphicEl(dataIndex) as PictorialBarElement;
+                let bar = oldData.getItemGraphicEl(dataIndex) as PictorialBarElement;
                 bar && removeBar(
                     oldData, dataIndex, bar.__pictorialSymbolMeta.animationModel, bar
                 );
@@ -216,8 +216,8 @@ class PictorialBarView extends ChartView {
     }
 
     remove(ecModel: GlobalModel, api: ExtensionAPI) {
-        var group = this.group;
-        var data = this._data;
+        let group = this.group;
+        let data = this._data;
         if (ecModel.get('animation')) {
             if (data) {
                 data.eachItemGraphicEl(function (bar: PictorialBarElement) {
@@ -238,16 +238,16 @@ function getSymbolMeta(
     itemModel: ItemModel,
     opt: CreateOpts
 ): SymbolMeta {
-    var layout = data.getItemLayout(dataIndex) as RectLayout;
-    var symbolRepeat = itemModel.get('symbolRepeat');
-    var symbolClip = itemModel.get('symbolClip');
-    var symbolPosition = itemModel.get('symbolPosition') || 'start';
-    var symbolRotate = itemModel.get('symbolRotate');
-    var rotation = (symbolRotate || 0) * Math.PI / 180 || 0;
-    var symbolPatternSize = itemModel.get('symbolPatternSize') || 2;
-    var isAnimationEnabled = itemModel.isAnimationEnabled();
-
-    var symbolMeta: SymbolMeta = {
+    let layout = data.getItemLayout(dataIndex) as RectLayout;
+    let symbolRepeat = itemModel.get('symbolRepeat');
+    let symbolClip = itemModel.get('symbolClip');
+    let symbolPosition = itemModel.get('symbolPosition') || 'start';
+    let symbolRotate = itemModel.get('symbolRotate');
+    let rotation = (symbolRotate || 0) * Math.PI / 180 || 0;
+    let symbolPatternSize = itemModel.get('symbolPatternSize') || 2;
+    let isAnimationEnabled = itemModel.isAnimationEnabled();
+
+    let symbolMeta: SymbolMeta = {
         dataIndex: dataIndex,
         layout: layout,
         itemModel: itemModel,
@@ -272,8 +272,8 @@ function getSymbolMeta(
 
     prepareLineWidth(itemModel, symbolMeta.symbolScale, rotation, opt, symbolMeta);
 
-    var symbolSize = symbolMeta.symbolSize;
-    var symbolOffset = itemModel.get('symbolOffset');
+    let symbolSize = symbolMeta.symbolSize;
+    let symbolOffset = itemModel.get('symbolOffset');
     if (zrUtil.isArray(symbolOffset)) {
         symbolOffset = [
             parsePercent(symbolOffset[0], symbolSize[0]),
@@ -298,15 +298,15 @@ function prepareBarLength(
     opt: CreateOpts,
     outputSymbolMeta: SymbolMeta
 ) {
-    var valueDim = opt.valueDim;
-    var symbolBoundingData = itemModel.get('symbolBoundingData');
-    var valueAxis = opt.coordSys.getOtherAxis(opt.coordSys.getBaseAxis());
-    var zeroPx = valueAxis.toGlobalCoord(valueAxis.dataToCoord(0));
-    var pxSignIdx = 1 - +(layout[valueDim.wh] <= 0);
-    var boundingLength;
+    let valueDim = opt.valueDim;
+    let symbolBoundingData = itemModel.get('symbolBoundingData');
+    let valueAxis = opt.coordSys.getOtherAxis(opt.coordSys.getBaseAxis());
+    let zeroPx = valueAxis.toGlobalCoord(valueAxis.dataToCoord(0));
+    let pxSignIdx = 1 - +(layout[valueDim.wh] <= 0);
+    let boundingLength;
 
     if (zrUtil.isArray(symbolBoundingData)) {
-        var symbolBoundingExtent = [
+        let symbolBoundingExtent = [
             convertToCoordOnAxis(valueAxis, symbolBoundingData[0]) - zeroPx,
             convertToCoordOnAxis(valueAxis, symbolBoundingData[1]) - zeroPx
         ];
@@ -349,11 +349,11 @@ function prepareSymbolSize(
     opt: CreateOpts,
     outputSymbolMeta: SymbolMeta
 ) {
-    var valueDim = opt.valueDim;
-    var categoryDim = opt.categoryDim;
-    var categorySize = Math.abs(layout[categoryDim.wh]);
+    let valueDim = opt.valueDim;
+    let categoryDim = opt.categoryDim;
+    let categorySize = Math.abs(layout[categoryDim.wh]);
 
-    var symbolSize = data.getItemVisual(dataIndex, 'symbolSize');
+    let symbolSize = data.getItemVisual(dataIndex, 'symbolSize');
     if (zrUtil.isArray(symbolSize)) {
         symbolSize = symbolSize.slice();
     }
@@ -381,7 +381,7 @@ function prepareSymbolSize(
     outputSymbolMeta.symbolSize = symbolSize;
 
     // If x or y is less than zero, show reversed shape.
-    var symbolScale = outputSymbolMeta.symbolScale = [
+    let symbolScale = outputSymbolMeta.symbolScale = [
         symbolSize[0] / symbolPatternSize,
         symbolSize[1] / symbolPatternSize
     ];
@@ -399,7 +399,7 @@ function prepareLineWidth(
     // In symbols are drawn with scale, so do not need to care about the case that width
     // or height are too small. But symbol use strokeNoScale, where acture lineWidth should
     // be calculated.
-    var valueLineWidth = itemModel.get(BAR_BORDER_WIDTH_QUERY) || 0;
+    let valueLineWidth = itemModel.get(BAR_BORDER_WIDTH_QUERY) || 0;
 
     if (valueLineWidth) {
         pathForLineWidth.attr({
@@ -428,12 +428,12 @@ function prepareLayoutInfo(
     opt: CreateOpts,
     outputSymbolMeta: SymbolMeta
 ) {
-    var categoryDim = opt.categoryDim;
-    var valueDim = opt.valueDim;
-    var pxSign = outputSymbolMeta.pxSign;
+    let categoryDim = opt.categoryDim;
+    let valueDim = opt.valueDim;
+    let pxSign = outputSymbolMeta.pxSign;
 
-    var unitLength = Math.max(symbolSize[valueDim.index] + valueLineWidth, 0);
-    var pathLen = unitLength;
+    let unitLength = Math.max(symbolSize[valueDim.index] + valueLineWidth, 0);
+    let pathLen = unitLength;
 
     // Note: rotation will not effect the layout of symbols, because user may
     // want symbols to rotate on its center, which should not be translated
@@ -450,22 +450,22 @@ function prepareLayoutInfo(
         }
         let symbolMarginNumeric = parsePercent(symbolMargin, symbolSize[valueDim.index]);
 
-        var uLenWithMargin = Math.max(unitLength + symbolMarginNumeric * 2, 0);
+        let uLenWithMargin = Math.max(unitLength + symbolMarginNumeric * 2, 0);
 
         // When symbol margin is less than 0, margin at both ends will be subtracted
         // to ensure that all of the symbols will not be overflow the given area.
-        var endFix = hasEndGap ? 0 : symbolMarginNumeric * 2;
+        let endFix = hasEndGap ? 0 : symbolMarginNumeric * 2;
 
         // Both final repeatTimes and final symbolMarginNumeric area calculated based on
         // boundingLength.
-        var repeatSpecified = isNumeric(symbolRepeat);
-        var repeatTimes = repeatSpecified
+        let repeatSpecified = isNumeric(symbolRepeat);
+        let repeatTimes = repeatSpecified
             ? symbolRepeat as number
             : toIntTimes((absBoundingLength + endFix) / uLenWithMargin);
 
         // Adjust calculate margin, to ensure each symbol is displayed
         // entirely in the given layout area.
-        var mDiff = absBoundingLength - repeatTimes * unitLength;
+        let mDiff = absBoundingLength - repeatTimes * unitLength;
         symbolMarginNumeric = mDiff / 2 / (hasEndGap ? repeatTimes : repeatTimes - 1);
         uLenWithMargin = unitLength + symbolMarginNumeric * 2;
         endFix = hasEndGap ? 0 : symbolMarginNumeric * 2;
@@ -482,8 +482,8 @@ function prepareLayoutInfo(
         outputSymbolMeta.symbolMargin = symbolMarginNumeric;
     }
 
-    var sizeFix = pxSign * (pathLen / 2);
-    var pathPosition = outputSymbolMeta.pathPosition = [] as number[];
+    let sizeFix = pxSign * (pathLen / 2);
+    let pathPosition = outputSymbolMeta.pathPosition = [] as number[];
     pathPosition[categoryDim.index] = layout[categoryDim.wh] / 2;
     pathPosition[valueDim.index] = symbolPosition === 'start'
         ? sizeFix
@@ -495,17 +495,17 @@ function prepareLayoutInfo(
         pathPosition[1] += symbolOffset[1];
     }
 
-    var bundlePosition = outputSymbolMeta.bundlePosition = [] as number[];
+    let bundlePosition = outputSymbolMeta.bundlePosition = [] as number[];
     bundlePosition[categoryDim.index] = layout[categoryDim.xy];
     bundlePosition[valueDim.index] = layout[valueDim.xy];
 
-    var barRectShape = outputSymbolMeta.barRectShape = zrUtil.extend({}, layout);
+    let barRectShape = outputSymbolMeta.barRectShape = zrUtil.extend({}, layout);
     barRectShape[valueDim.wh] = pxSign * Math.max(
         Math.abs(layout[valueDim.wh]), Math.abs(pathPosition[valueDim.index] + sizeFix)
     );
     barRectShape[categoryDim.wh] = layout[categoryDim.wh];
 
-    var clipShape = outputSymbolMeta.clipShape = {} as RectShape;
+    let clipShape = outputSymbolMeta.clipShape = {} as RectShape;
     // Consider that symbol may be overflow layout rect.
     clipShape[categoryDim.xy] = -layout[categoryDim.xy];
     clipShape[categoryDim.wh] = opt.ecSize[categoryDim.wh];
@@ -514,8 +514,8 @@ function prepareLayoutInfo(
 }
 
 function createPath(symbolMeta: SymbolMeta) {
-    var symbolPatternSize = symbolMeta.symbolPatternSize;
-    var path = createSymbol(
+    let symbolPatternSize = symbolMeta.symbolPatternSize;
+    let path = createSymbol(
         // Consider texture img, make a big size.
         symbolMeta.symbolType,
         -symbolPatternSize / 2,
@@ -537,15 +537,15 @@ function createPath(symbolMeta: SymbolMeta) {
 function createOrUpdateRepeatSymbols(
     bar: PictorialBarElement, opt: CreateOpts, symbolMeta: SymbolMeta, isUpdate?: boolean
 ) {
-    var bundle = bar.__pictorialBundle;
-    var symbolSize = symbolMeta.symbolSize;
-    var valueLineWidth = symbolMeta.valueLineWidth;
-    var pathPosition = symbolMeta.pathPosition;
-    var valueDim = opt.valueDim;
-    var repeatTimes = symbolMeta.repeatTimes || 0;
+    let bundle = bar.__pictorialBundle;
+    let symbolSize = symbolMeta.symbolSize;
+    let valueLineWidth = symbolMeta.valueLineWidth;
+    let pathPosition = symbolMeta.pathPosition;
+    let valueDim = opt.valueDim;
+    let repeatTimes = symbolMeta.repeatTimes || 0;
 
-    var index = 0;
-    var unit = symbolSize[opt.valueDim.index] + valueLineWidth + symbolMeta.symbolMargin * 2;
+    let index = 0;
+    let unit = symbolSize[opt.valueDim.index] + valueLineWidth + symbolMeta.symbolMargin * 2;
 
     eachPath(bar, function (path) {
         path.__pictorialAnimationIndex = index;
@@ -565,12 +565,12 @@ function createOrUpdateRepeatSymbols(
     });
 
     for (; index < repeatTimes; index++) {
-        var path = createPath(symbolMeta);
+        let path = createPath(symbolMeta);
         path.__pictorialAnimationIndex = index;
         path.__pictorialRepeatTimes = repeatTimes;
         bundle.add(path);
 
-        var target = makeTarget(index);
+        let target = makeTarget(index);
 
         updateAttr(
             path,
@@ -595,11 +595,11 @@ function createOrUpdateRepeatSymbols(
     }
 
     function makeTarget(index: number) {
-        var position = pathPosition.slice();
+        let position = pathPosition.slice();
         // (start && pxSign > 0) || (end && pxSign < 0): i = repeatTimes - index
         // Otherwise: i = index;
-        var pxSign = symbolMeta.pxSign;
-        var i = index;
+        let pxSign = symbolMeta.pxSign;
+        let i = index;
         if (symbolMeta.symbolRepeatDirection === 'start' ? pxSign > 0 : pxSign < 0) {
             i = repeatTimes - 1 - index;
         }
@@ -631,8 +631,8 @@ function createOrUpdateSingleSymbol(
     symbolMeta: SymbolMeta,
     isUpdate?: boolean
 ) {
-    var bundle = bar.__pictorialBundle;
-    var mainPath = bar.__pictorialMainPath;
+    let bundle = bar.__pictorialBundle;
+    let mainPath = bar.__pictorialMainPath;
 
     if (!mainPath) {
         mainPath = bar.__pictorialMainPath = createPath(symbolMeta);
@@ -687,9 +687,9 @@ function createOrUpdateBarRect(
     symbolMeta: SymbolMeta,
     isUpdate?: boolean
 ) {
-    var rectShape = zrUtil.extend({}, symbolMeta.barRectShape);
+    let rectShape = zrUtil.extend({}, symbolMeta.barRectShape);
 
-    var barRect = bar.__pictorialBarRect;
+    let barRect = bar.__pictorialBarRect;
     if (!barRect) {
         barRect = bar.__pictorialBarRect = new graphic.Rect({
             z2: 2,
@@ -717,11 +717,11 @@ function createOrUpdateClip(
 ) {
     // If not clip, symbol will be remove and rebuilt.
     if (symbolMeta.symbolClip) {
-        var clipPath = bar.__pictorialClipPath;
-        var clipShape = zrUtil.extend({}, symbolMeta.clipShape);
-        var valueDim = opt.valueDim;
-        var animationModel = symbolMeta.animationModel;
-        var dataIndex = symbolMeta.dataIndex;
+        let clipPath = bar.__pictorialClipPath;
+        let clipShape = zrUtil.extend({}, symbolMeta.clipShape);
+        let valueDim = opt.valueDim;
+        let animationModel = symbolMeta.animationModel;
+        let dataIndex = symbolMeta.dataIndex;
 
         if (clipPath) {
             graphic.updateProps(
@@ -734,7 +734,7 @@ function createOrUpdateClip(
             bar.__pictorialBundle.setClipPath(clipPath);
             bar.__pictorialClipPath = clipPath;
 
-            var target = {} as RectShape;
+            let target = {} as RectShape;
             target[valueDim.wh] = symbolMeta.clipShape[valueDim.wh];
 
             graphic[isUpdate ? 'updateProps' : 'initProps'](
@@ -745,7 +745,7 @@ function createOrUpdateClip(
 }
 
 function getItemModel(data: List, dataIndex: number) {
-    var itemModel = data.getItemModel(dataIndex) as ItemModel;
+    let itemModel = data.getItemModel(dataIndex) as ItemModel;
     itemModel.getAnimationDelayParams = getAnimationDelayParams;
     itemModel.isAnimationEnabled = isAnimationEnabled;
     return itemModel;
@@ -767,7 +767,7 @@ function isAnimationEnabled(this: ItemModel) {
 function updateHoverAnimation(path: PictorialSymbol, symbolMeta: SymbolMeta) {
     path.off('emphasis').off('normal');
 
-    var scale = symbolMeta.symbolScale.slice();
+    let scale = symbolMeta.symbolScale.slice();
 
     symbolMeta.hoverAnimation && path
         .on('emphasis', function () {
@@ -785,9 +785,9 @@ function updateHoverAnimation(path: PictorialSymbol, symbolMeta: SymbolMeta) {
 
 function createBar(data: List, opt: CreateOpts, symbolMeta: SymbolMeta, isUpdate?: boolean) {
     // bar is the main element for each data.
-    var bar = new graphic.Group() as PictorialBarElement;
+    let bar = new graphic.Group() as PictorialBarElement;
     // bundle is used for location and clip.
-    var bundle = new graphic.Group();
+    let bundle = new graphic.Group();
     bar.add(bundle);
     bar.__pictorialBundle = bundle;
     bundle.attr('position', symbolMeta.bundlePosition.slice());
@@ -810,9 +810,9 @@ function createBar(data: List, opt: CreateOpts, symbolMeta: SymbolMeta, isUpdate
 }
 
 function updateBar(bar: PictorialBarElement, opt: CreateOpts, symbolMeta: SymbolMeta) {
-    var animationModel = symbolMeta.animationModel;
-    var dataIndex = symbolMeta.dataIndex;
-    var bundle = bar.__pictorialBundle;
+    let animationModel = symbolMeta.animationModel;
+    let dataIndex = symbolMeta.dataIndex;
+    let bundle = bar.__pictorialBundle;
 
     graphic.updateProps(
         bundle, {position: symbolMeta.bundlePosition.slice()}, animationModel, dataIndex
@@ -834,10 +834,10 @@ function removeBar(
     data: List, dataIndex: number, animationModel: Model<AnimationOptionMixin>, bar: PictorialBarElement
 ) {
     // Not show text when animating
-    var labelRect = bar.__pictorialBarRect;
+    let labelRect = bar.__pictorialBarRect;
     labelRect && (labelRect.style.text = null);
 
-    var pathes = [];
+    let pathes = [];
     eachPath(bar, function (path) {
         pathes.push(path);
     });
@@ -902,14 +902,14 @@ function updateCommon(
     opt: CreateOpts,
     symbolMeta: SymbolMeta
 ) {
-    var color = symbolMeta.color;
-    var dataIndex = symbolMeta.dataIndex;
-    var itemModel = symbolMeta.itemModel;
+    let color = symbolMeta.color;
+    let dataIndex = symbolMeta.dataIndex;
+    let itemModel = symbolMeta.itemModel;
     // Color must be excluded.
     // Because symbol provide setColor individually to set fill and stroke
-    var normalStyle = itemModel.getModel('itemStyle').getItemStyle(['color']);
-    var hoverStyle = itemModel.getModel(['emphasis', 'itemStyle']).getItemStyle();
-    var cursorStyle = itemModel.getShallow('cursor');
+    let normalStyle = itemModel.getModel('itemStyle').getItemStyle(['color']);
+    let hoverStyle = itemModel.getModel(['emphasis', 'itemStyle']).getItemStyle();
+    let cursorStyle = itemModel.getShallow('cursor');
 
     eachPath(bar, function (path) {
         // PENDING setColor should be before setStyle!!!
@@ -927,9 +927,9 @@ function updateCommon(
         path.z2 = symbolMeta.z2;
     });
 
-    var barRectHoverStyle = {};
-    var barPositionOutside = opt.valueDim.posDesc[+(symbolMeta.boundingLength > 0)];
-    var barRect = bar.__pictorialBarRect;
+    let barRectHoverStyle = {};
+    let barPositionOutside = opt.valueDim.posDesc[+(symbolMeta.boundingLength > 0)];
+    let barRect = bar.__pictorialBarRect;
 
     setLabel(
         barRect.style, barRectHoverStyle, itemModel,
@@ -940,7 +940,7 @@ function updateCommon(
 }
 
 function toIntTimes(times: number) {
-    var roundedTimes = Math.round(times);
+    let roundedTimes = Math.round(times);
     // Escapse accurate error
     return Math.abs(times - roundedTimes) < 1e-4
         ? roundedTimes
diff --git a/src/chart/bar/barItemStyle.ts b/src/chart/bar/barItemStyle.ts
index d1bc317..6a9f172 100644
--- a/src/chart/bar/barItemStyle.ts
+++ b/src/chart/bar/barItemStyle.ts
@@ -21,7 +21,7 @@ import makeStyleMapper from '../../model/mixin/makeStyleMapper';
 import { StyleProps } from 'zrender/src/graphic/Style';
 import Model from '../../model/Model';
 
-var mapStyle = makeStyleMapper(
+const mapStyle = makeStyleMapper(
     [
         ['fill', 'color'],
         ['stroke', 'borderColor'],
@@ -50,9 +50,9 @@ type BarItemStyleKeys = 'fill'
 type ItemStyleProps = Pick<StyleProps, BarItemStyleKeys>;
 
 export function getBarItemStyle(model: Model, excludes?: BarItemStyleKeys[]): ItemStyleProps {
-    var style = mapStyle(model, excludes);
+    let style = mapStyle(model, excludes);
     if (model.getBorderLineDash) {
-        var lineDash = model.getBorderLineDash();
+        let lineDash = model.getBorderLineDash();
         lineDash && (style.lineDash = lineDash);
     }
     return style;
diff --git a/src/chart/bar/helper.ts b/src/chart/bar/helper.ts
index ec26164..a2fa3b6 100644
--- a/src/chart/bar/helper.ts
+++ b/src/chart/bar/helper.ts
@@ -34,8 +34,8 @@ export function setLabel(
     dataIndex: number,
     labelPositionOutside: LabelOption['position']
 ) {
-    var labelModel = itemModel.getModel('label');
-    var hoverLabelModel = itemModel.getModel(['emphasis', 'label']);
+    let labelModel = itemModel.getModel('label');
+    let hoverLabelModel = itemModel.getModel(['emphasis', 'label']);
 
     graphic.setLabelStyle(
         normalStyle, hoverStyle, labelModel, hoverLabelModel,
diff --git a/src/chart/boxplot/BoxplotView.ts b/src/chart/boxplot/BoxplotView.ts
index 646d788..fa0ad36 100644
--- a/src/chart/boxplot/BoxplotView.ts
+++ b/src/chart/boxplot/BoxplotView.ts
@@ -29,7 +29,7 @@ import { BoxplotItemLayout } from './boxplotLayout';
 import { StyleProps } from 'zrender/src/graphic/Style';
 
 // Update common properties
-var EMPHASIS_ITEM_STYLE_PATH = ['emphasis', 'itemStyle'] as const;
+const EMPHASIS_ITEM_STYLE_PATH = ['emphasis', 'itemStyle'] as const;
 
 class BoxplotView extends ChartView {
     static type = 'boxplot';
@@ -38,9 +38,9 @@ class BoxplotView extends ChartView {
     private _data: List;
 
     render(seriesModel: BoxplotSeriesModel, ecModel: GlobalModel, api: ExtensionAPI) {
-        var data = seriesModel.getData();
-        var group = this.group;
-        var oldData = this._data;
+        let data = seriesModel.getData();
+        let group = this.group;
+        let oldData = this._data;
 
         // There is no old data only when first rendering or switching from
         // stream mode to normal mode, where previous elements should be removed.
@@ -48,19 +48,19 @@ class BoxplotView extends ChartView {
             group.removeAll();
         }
 
-        var constDim = seriesModel.get('layout') === 'horizontal' ? 1 : 0;
+        let constDim = seriesModel.get('layout') === 'horizontal' ? 1 : 0;
 
         data.diff(oldData)
             .add(function (newIdx) {
                 if (data.hasValue(newIdx)) {
-                    var itemLayout = data.getItemLayout(newIdx) as BoxplotItemLayout;
-                    var symbolEl = createNormalBox(itemLayout, data, newIdx, constDim, true);
+                    let itemLayout = data.getItemLayout(newIdx) as BoxplotItemLayout;
+                    let symbolEl = createNormalBox(itemLayout, data, newIdx, constDim, true);
                     data.setItemGraphicEl(newIdx, symbolEl);
                     group.add(symbolEl);
                 }
             })
             .update(function (newIdx, oldIdx) {
-                var symbolEl = oldData.getItemGraphicEl(oldIdx) as BoxPath;
+                let symbolEl = oldData.getItemGraphicEl(oldIdx) as BoxPath;
 
                 // Empty data
                 if (!data.hasValue(newIdx)) {
@@ -68,7 +68,7 @@ class BoxplotView extends ChartView {
                     return;
                 }
 
-                var itemLayout = data.getItemLayout(newIdx) as BoxplotItemLayout;
+                let itemLayout = data.getItemLayout(newIdx) as BoxplotItemLayout;
                 if (!symbolEl) {
                     symbolEl = createNormalBox(itemLayout, data, newIdx, constDim);
                 }
@@ -81,7 +81,7 @@ class BoxplotView extends ChartView {
                 data.setItemGraphicEl(newIdx, symbolEl);
             })
             .remove(function (oldIdx) {
-                var el = oldData.getItemGraphicEl(oldIdx);
+                let el = oldData.getItemGraphicEl(oldIdx);
                 el && group.remove(el);
             })
             .execute();
@@ -90,8 +90,8 @@ class BoxplotView extends ChartView {
     }
 
     remove(ecModel: GlobalModel) {
-        var group = this.group;
-        var data = this._data;
+        let group = this.group;
+        let data = this._data;
         this._data = null;
         data && data.eachItemGraphicEl(function (el) {
             el && group.remove(el);
@@ -117,9 +117,9 @@ class BoxPath extends Path<BoxPathProps> {
     }
 
     buildPath(ctx: CanvasRenderingContext2D, shape: BoxPathShape) {
-        var ends = shape.points;
+        let ends = shape.points;
 
-        var i = 0;
+        let i = 0;
         ctx.moveTo(ends[i][0], ends[i][1]);
         i++;
         for (; i < 4; i++) {
@@ -143,9 +143,9 @@ function createNormalBox(
     constDim: number,
     isInit?: boolean
 ) {
-    var ends = itemLayout.ends;
+    let ends = itemLayout.ends;
 
-    var el = new BoxPath({
+    let el = new BoxPath({
         shape: {
             points: isInit
                 ? transInit(ends, constDim, itemLayout)
@@ -165,8 +165,8 @@ function updateNormalBoxData(
     dataIndex: number,
     isInit?: boolean
 ) {
-    var seriesModel = data.hostModel;
-    var updateMethod = graphic[isInit ? 'initProps' : 'updateProps'];
+    let seriesModel = data.hostModel;
+    let updateMethod = graphic[isInit ? 'initProps' : 'updateProps'];
 
     updateMethod(
         el,
@@ -175,19 +175,19 @@ function updateNormalBoxData(
         dataIndex
     );
 
-    var itemModel = data.getItemModel<BoxplotDataItemOption>(dataIndex);
-    var normalItemStyleModel = itemModel.getModel('itemStyle');
-    var borderColor = data.getItemVisual(dataIndex, 'color');
+    let itemModel = data.getItemModel<BoxplotDataItemOption>(dataIndex);
+    let normalItemStyleModel = itemModel.getModel('itemStyle');
+    let borderColor = data.getItemVisual(dataIndex, 'color');
 
     // Exclude borderColor.
-    var itemStyle = normalItemStyleModel.getItemStyle(['borderColor']) as StyleProps;
+    let itemStyle = normalItemStyleModel.getItemStyle(['borderColor']) as StyleProps;
     itemStyle.stroke = borderColor;
     itemStyle.strokeNoScale = true;
     el.useStyle(itemStyle);
 
     el.z2 = 100;
 
-    var hoverStyle = itemModel.getModel(EMPHASIS_ITEM_STYLE_PATH).getItemStyle();
+    let hoverStyle = itemModel.getModel(EMPHASIS_ITEM_STYLE_PATH).getItemStyle();
     graphic.setHoverStyle(el, hoverStyle);
 }
 
diff --git a/src/chart/boxplot/boxplotLayout.ts b/src/chart/boxplot/boxplotLayout.ts
index 59a1235..00bbf86 100644
--- a/src/chart/boxplot/boxplotLayout.ts
+++ b/src/chart/boxplot/boxplotLayout.ts
@@ -23,7 +23,7 @@ import type GlobalModel from '../../model/Global';
 import BoxplotSeriesModel from './BoxplotSeries';
 import Axis2D from '../../coord/cartesian/Axis2D';
 
-var each = zrUtil.each;
+const each = zrUtil.each;
 
 interface GroupItem {
     seriesModels: BoxplotSeriesModel[]
@@ -39,10 +39,10 @@ export interface BoxplotItemLayout {
 
 export default function (ecModel: GlobalModel) {
 
-    var groupResult = groupSeriesByAxis(ecModel);
+    let groupResult = groupSeriesByAxis(ecModel);
 
     each(groupResult, function (groupItem) {
-        var seriesModels = groupItem.seriesModels;
+        let seriesModels = groupItem.seriesModels;
 
         if (!seriesModels.length) {
             return;
@@ -64,12 +64,12 @@ export default function (ecModel: GlobalModel) {
  * Group series by axis.
  */
 function groupSeriesByAxis(ecModel: GlobalModel) {
-    var result: GroupItem[] = [];
-    var axisList: Axis2D[] = [];
+    let result: GroupItem[] = [];
+    let axisList: Axis2D[] = [];
 
     ecModel.eachSeriesByType('boxplot', function (seriesModel: BoxplotSeriesModel) {
-        var baseAxis = seriesModel.getBaseAxis();
-        var idx = zrUtil.indexOf(axisList, baseAxis);
+        let baseAxis = seriesModel.getBaseAxis();
+        let idx = zrUtil.indexOf(axisList, baseAxis);
 
         if (idx < 0) {
             idx = axisList.length;
@@ -90,21 +90,21 @@ function groupSeriesByAxis(ecModel: GlobalModel) {
  * Calculate offset and box width for each series.
  */
 function calculateBase(groupItem: GroupItem) {
-    var extent;
-    var baseAxis = groupItem.axis;
-    var seriesModels = groupItem.seriesModels;
-    var seriesCount = seriesModels.length;
+    let extent;
+    let baseAxis = groupItem.axis;
+    let seriesModels = groupItem.seriesModels;
+    let seriesCount = seriesModels.length;
 
-    var boxWidthList: number[] = groupItem.boxWidthList = [];
-    var boxOffsetList: number[] = groupItem.boxOffsetList = [];
-    var boundList: number[][] = [];
+    let boxWidthList: number[] = groupItem.boxWidthList = [];
+    let boxOffsetList: number[] = groupItem.boxOffsetList = [];
+    let boundList: number[][] = [];
 
-    var bandWidth: number;
+    let bandWidth: number;
     if (baseAxis.type === 'category') {
         bandWidth = baseAxis.getBandWidth();
     }
     else {
-        var maxDataCount = 0;
+        let maxDataCount = 0;
         each(seriesModels, function (seriesModel) {
             maxDataCount = Math.max(maxDataCount, seriesModel.getData().count());
         });
@@ -113,7 +113,7 @@ function calculateBase(groupItem: GroupItem) {
     }
 
     each(seriesModels, function (seriesModel) {
-        var boxWidthBound = seriesModel.get('boxWidth');
+        let boxWidthBound = seriesModel.get('boxWidth');
         if (!zrUtil.isArray(boxWidthBound)) {
             boxWidthBound = [boxWidthBound, boxWidthBound];
         }
@@ -123,10 +123,10 @@ function calculateBase(groupItem: GroupItem) {
         ]);
     });
 
-    var availableWidth = bandWidth * 0.8 - 2;
-    var boxGap = availableWidth / seriesCount * 0.3;
-    var boxWidth = (availableWidth - boxGap * (seriesCount - 1)) / seriesCount;
-    var base = boxWidth / 2 - availableWidth / 2;
+    let availableWidth = bandWidth * 0.8 - 2;
+    let boxGap = availableWidth / seriesCount * 0.3;
+    let boxWidth = (availableWidth - boxGap * (seriesCount - 1)) / seriesCount;
+    let base = boxWidth / 2 - availableWidth / 2;
 
     each(seriesModels, function (seriesModel, idx) {
         boxOffsetList.push(base);
@@ -142,29 +142,29 @@ function calculateBase(groupItem: GroupItem) {
  * Calculate points location for each series.
  */
 function layoutSingleSeries(seriesModel: BoxplotSeriesModel, offset: number, boxWidth: number) {
-    var coordSys = seriesModel.coordinateSystem;
-    var data = seriesModel.getData();
-    var halfWidth = boxWidth / 2;
-    var cDimIdx = seriesModel.get('layout') === 'horizontal' ? 0 : 1;
-    var vDimIdx = 1 - cDimIdx;
-    var coordDims = ['x', 'y'];
-    var cDim = data.mapDimension(coordDims[cDimIdx]);
-    var vDims = data.mapDimension(coordDims[vDimIdx], true);
+    let coordSys = seriesModel.coordinateSystem;
+    let data = seriesModel.getData();
+    let halfWidth = boxWidth / 2;
+    let cDimIdx = seriesModel.get('layout') === 'horizontal' ? 0 : 1;
+    let vDimIdx = 1 - cDimIdx;
+    let coordDims = ['x', 'y'];
+    let cDim = data.mapDimension(coordDims[cDimIdx]);
+    let vDims = data.mapDimension(coordDims[vDimIdx], true);
 
     if (cDim == null || vDims.length < 5) {
         return;
     }
 
-    for (var dataIndex = 0; dataIndex < data.count(); dataIndex++) {
-        var axisDimVal = data.get(cDim, dataIndex) as number;
+    for (let dataIndex = 0; dataIndex < data.count(); dataIndex++) {
+        let axisDimVal = data.get(cDim, dataIndex) as number;
 
-        var median = getPoint(axisDimVal, vDims[2], dataIndex);
-        var end1 = getPoint(axisDimVal, vDims[0], dataIndex);
-        var end2 = getPoint(axisDimVal, vDims[1], dataIndex);
-        var end4 = getPoint(axisDimVal, vDims[3], dataIndex);
-        var end5 = getPoint(axisDimVal, vDims[4], dataIndex);
+        let median = getPoint(axisDimVal, vDims[2], dataIndex);
+        let end1 = getPoint(axisDimVal, vDims[0], dataIndex);
+        let end2 = getPoint(axisDimVal, vDims[1], dataIndex);
+        let end4 = getPoint(axisDimVal, vDims[3], dataIndex);
+        let end5 = getPoint(axisDimVal, vDims[4], dataIndex);
 
-        var ends: number[][] = [];
+        let ends: number[][] = [];
         addBodyEnd(ends, end2, false);
         addBodyEnd(ends, end4, true);
 
@@ -180,11 +180,11 @@ function layoutSingleSeries(seriesModel: BoxplotSeriesModel, offset: number, box
     }
 
     function getPoint(axisDimVal: number, dim: string, dataIndex: number) {
-        var val = data.get(dim, dataIndex) as number;
-        var p = [];
+        let val = data.get(dim, dataIndex) as number;
+        let p = [];
         p[cDimIdx] = axisDimVal;
         p[vDimIdx] = val;
-        var point;
+        let point;
         if (isNaN(axisDimVal) || isNaN(val)) {
             point = [NaN, NaN];
         }
@@ -196,8 +196,8 @@ function layoutSingleSeries(seriesModel: BoxplotSeriesModel, offset: number, box
     }
 
     function addBodyEnd(ends: number[][], point: number[], start?: boolean) {
-        var point1 = point.slice();
-        var point2 = point.slice();
+        let point1 = point.slice();
+        let point2 = point.slice();
         point1[cDimIdx] += halfWidth;
         point2[cDimIdx] -= halfWidth;
         start
@@ -206,8 +206,8 @@ function layoutSingleSeries(seriesModel: BoxplotSeriesModel, offset: number, box
     }
 
     function layEndLine(ends: number[][], endCenter: number[]) {
-        var from = endCenter.slice();
-        var to = endCenter.slice();
+        let from = endCenter.slice();
+        let to = endCenter.slice();
         from[cDimIdx] -= halfWidth;
         to[cDimIdx] += halfWidth;
         ends.push(from, to);
diff --git a/src/chart/boxplot/boxplotVisual.ts b/src/chart/boxplot/boxplotVisual.ts
index ba75c13..1436ba9 100644
--- a/src/chart/boxplot/boxplotVisual.ts
+++ b/src/chart/boxplot/boxplotVisual.ts
@@ -21,16 +21,16 @@ import GlobalModel from '../../model/Global';
 import ExtensionAPI from '../../ExtensionAPI';
 import BoxplotSeriesModel, { BoxplotDataItemOption } from './BoxplotSeries';
 
-var borderColorQuery = ['itemStyle', 'borderColor'] as const;
+const borderColorQuery = ['itemStyle', 'borderColor'] as const;
 
 export default function (ecModel: GlobalModel, api: ExtensionAPI) {
 
-    var globalColors = ecModel.get('color');
+    let globalColors = ecModel.get('color');
 
     ecModel.eachRawSeriesByType('boxplot', function (seriesModel: BoxplotSeriesModel) {
 
-        var defaulColor = globalColors[seriesModel.seriesIndex % globalColors.length];
-        var data = seriesModel.getData();
+        let defaulColor = globalColors[seriesModel.seriesIndex % globalColors.length];
+        let data = seriesModel.getData();
 
         data.setVisual({
             legendSymbol: 'roundRect',
@@ -42,7 +42,7 @@ export default function (ecModel: GlobalModel, api: ExtensionAPI) {
         // Only visible series has each data be visual encoded
         if (!ecModel.isSeriesFiltered(seriesModel)) {
             data.each(function (idx) {
-                var itemModel = data.getItemModel<BoxplotDataItemOption>(idx);
+                let itemModel = data.getItemModel<BoxplotDataItemOption>(idx);
                 data.setItemVisual(
                     idx,
                     {color: itemModel.get(borderColorQuery, true)}
diff --git a/src/chart/candlestick/CandlestickSeries.ts b/src/chart/candlestick/CandlestickSeries.ts
index 4a62b26..618227e 100644
--- a/src/chart/candlestick/CandlestickSeries.ts
+++ b/src/chart/candlestick/CandlestickSeries.ts
@@ -152,7 +152,7 @@ class CandlestickSeriesModel extends SeriesModel<CandlestickSeriesOption> {
     }
 
     brushSelector(dataIndex: number, data: List, selectors: BrushCommonSelectorsForSeries): boolean {
-        var itemLayout = data.getItemLayout(dataIndex);
+        let itemLayout = data.getItemLayout(dataIndex);
         return itemLayout && selectors.rect(itemLayout.brushRect);
     }
 }
diff --git a/src/chart/candlestick/CandlestickView.ts b/src/chart/candlestick/CandlestickView.ts
index c4c9140..b37919d 100644
--- a/src/chart/candlestick/CandlestickView.ts
+++ b/src/chart/candlestick/CandlestickView.ts
@@ -31,8 +31,8 @@ import {CandlestickItemLayout} from './candlestickLayout';
 import { CoordinateSystemClipArea } from '../../coord/CoordinateSystem';
 import Model from '../../model/Model';
 
-var EMPHASIS_ITEM_STYLE_PATH = ['emphasis', 'itemStyle'] as const;
-var SKIP_PROPS = ['color', 'borderColor'] as const;
+const EMPHASIS_ITEM_STYLE_PATH = ['emphasis', 'itemStyle'] as const;
+const SKIP_PROPS = ['color', 'borderColor'] as const;
 
 class CandlestickView extends ChartView {
 
@@ -71,7 +71,7 @@ class CandlestickView extends ChartView {
     }
 
     _updateDrawMode(seriesModel: CandlestickSeriesModel) {
-        var isLargeDraw = seriesModel.pipelineContext.large;
+        let isLargeDraw = seriesModel.pipelineContext.large;
         if (this._isLargeDraw == null || isLargeDraw !== this._isLargeDraw) {
             this._isLargeDraw = isLargeDraw;
             this._clear();
@@ -79,14 +79,14 @@ class CandlestickView extends ChartView {
     }
 
     _renderNormal(seriesModel: CandlestickSeriesModel) {
-        var data = seriesModel.getData();
-        var oldData = this._data;
-        var group = this.group;
-        var isSimpleBox = data.getLayout('isSimpleBox');
+        let data = seriesModel.getData();
+        let oldData = this._data;
+        let group = this.group;
+        let isSimpleBox = data.getLayout('isSimpleBox');
 
-        var needsClip = seriesModel.get('clip', true);
-        var coord = seriesModel.coordinateSystem;
-        var clipArea = coord.getArea && coord.getArea();
+        let needsClip = seriesModel.get('clip', true);
+        let coord = seriesModel.coordinateSystem;
+        let clipArea = coord.getArea && coord.getArea();
 
         // There is no old data only when first rendering or switching from
         // stream mode to normal mode, where previous elements should be removed.
@@ -97,9 +97,9 @@ class CandlestickView extends ChartView {
         data.diff(oldData)
             .add(function (newIdx) {
                 if (data.hasValue(newIdx)) {
-                    var el;
+                    let el;
 
-                    var itemLayout = data.getItemLayout(newIdx) as CandlestickItemLayout;
+                    let itemLayout = data.getItemLayout(newIdx) as CandlestickItemLayout;
 
                     if (needsClip && isNormalBoxClipped(clipArea, itemLayout)) {
                         return;
@@ -116,7 +116,7 @@ class CandlestickView extends ChartView {
                 }
             })
             .update(function (newIdx, oldIdx) {
-                var el = oldData.getItemGraphicEl(oldIdx) as NormalBoxPath;
+                let el = oldData.getItemGraphicEl(oldIdx) as NormalBoxPath;
 
                 // Empty data
                 if (!data.hasValue(newIdx)) {
@@ -124,7 +124,7 @@ class CandlestickView extends ChartView {
                     return;
                 }
 
-                var itemLayout = data.getItemLayout(newIdx) as CandlestickItemLayout;
+                let itemLayout = data.getItemLayout(newIdx) as CandlestickItemLayout;
                 if (needsClip && isNormalBoxClipped(clipArea, itemLayout)) {
                     group.remove(el);
                     return;
@@ -147,7 +147,7 @@ class CandlestickView extends ChartView {
                 data.setItemGraphicEl(newIdx, el);
             })
             .remove(function (oldIdx) {
-                var el = oldData.getItemGraphicEl(oldIdx);
+                let el = oldData.getItemGraphicEl(oldIdx);
                 el && group.remove(el);
             })
             .execute();
@@ -160,7 +160,7 @@ class CandlestickView extends ChartView {
 
         createLarge(seriesModel, this.group);
 
-        var clipPath = seriesModel.get('clip', true)
+        let clipPath = seriesModel.get('clip', true)
             ? createClipPath(seriesModel.coordinateSystem, false, seriesModel)
             : null;
         if (clipPath) {
@@ -173,14 +173,14 @@ class CandlestickView extends ChartView {
     }
 
     _incrementalRenderNormal(params: StageHandlerProgressParams, seriesModel: CandlestickSeriesModel) {
-        var data = seriesModel.getData();
-        var isSimpleBox = data.getLayout('isSimpleBox');
+        let data = seriesModel.getData();
+        let isSimpleBox = data.getLayout('isSimpleBox');
 
-        var dataIndex;
+        let dataIndex;
         while ((dataIndex = params.next()) != null) {
-            var el;
+            let el;
 
-            var itemLayout = data.getItemLayout(dataIndex) as CandlestickItemLayout;
+            let itemLayout = data.getItemLayout(dataIndex) as CandlestickItemLayout;
             el = createNormalBox(itemLayout, dataIndex);
             setBoxCommon(el, data, dataIndex, isSimpleBox);
 
@@ -226,7 +226,7 @@ class NormalBoxPath extends Path<NormalBoxPathProps> {
     }
 
     buildPath(ctx: CanvasRenderingContext2D, shape: NormalBoxPathShape) {
-        var ends = shape.points;
+        let ends = shape.points;
 
         if (this.__simpleBox) {
             ctx.moveTo(ends[4][0], ends[4][1]);
@@ -249,7 +249,7 @@ class NormalBoxPath extends Path<NormalBoxPathProps> {
 
 
 function createNormalBox(itemLayout: CandlestickItemLayout, dataIndex: number, isInit?: boolean) {
-    var ends = itemLayout.ends;
+    let ends = itemLayout.ends;
     return new NormalBoxPath({
         shape: {
             points: isInit
@@ -261,8 +261,8 @@ function createNormalBox(itemLayout: CandlestickItemLayout, dataIndex: number, i
 }
 
 function isNormalBoxClipped(clipArea: CoordinateSystemClipArea, itemLayout: CandlestickItemLayout) {
-    var clipped = true;
-    for (var i = 0; i < itemLayout.ends.length; i++) {
+    let clipped = true;
+    for (let i = 0; i < itemLayout.ends.length; i++) {
         // If any point are in the region.
         if (clipArea.contain(itemLayout.ends[i][0], itemLayout.ends[i][1])) {
             clipped = false;
@@ -273,14 +273,14 @@ function isNormalBoxClipped(clipArea: CoordinateSystemClipArea, itemLayout: Cand
 }
 
 function setBoxCommon(el: NormalBoxPath, data: List, dataIndex: number, isSimpleBox?: boolean) {
-    var itemModel = data.getItemModel(dataIndex) as Model<CandlestickDataItemOption>;
-    var normalItemStyleModel = itemModel.getModel('itemStyle');
-    var color = data.getItemVisual(dataIndex, 'color');
-    var borderColor = data.getItemVisual(dataIndex, 'borderColor') || color;
+    let itemModel = data.getItemModel(dataIndex) as Model<CandlestickDataItemOption>;
+    let normalItemStyleModel = itemModel.getModel('itemStyle');
+    let color = data.getItemVisual(dataIndex, 'color');
+    let borderColor = data.getItemVisual(dataIndex, 'borderColor') || color;
 
     // Color must be excluded.
     // Because symbol provide setColor individually to set fill and stroke
-    var itemStyle = normalItemStyleModel.getItemStyle(SKIP_PROPS);
+    let itemStyle = normalItemStyleModel.getItemStyle(SKIP_PROPS);
 
     el.useStyle(itemStyle);
     el.style.strokeNoScale = true;
@@ -289,7 +289,7 @@ function setBoxCommon(el: NormalBoxPath, data: List, dataIndex: number, isSimple
 
     el.__simpleBox = isSimpleBox;
 
-    var hoverStyle = itemModel.getModel(EMPHASIS_ITEM_STYLE_PATH).getItemStyle();
+    let hoverStyle = itemModel.getModel(EMPHASIS_ITEM_STYLE_PATH).getItemStyle();
     graphic.setHoverStyle(el, hoverStyle);
 }
 
@@ -326,10 +326,10 @@ class LargeBoxPath extends Path {
     buildPath(ctx: CanvasRenderingContext2D, shape: LargeBoxPathShape) {
         // Drawing lines is more efficient than drawing
         // a whole line or drawing rects.
-        var points = shape.points;
-        for (var i = 0; i < points.length;) {
+        let points = shape.points;
+        for (let i = 0; i < points.length;) {
             if (this.__sign === points[i++]) {
-                var x = points[i++];
+                let x = points[i++];
                 ctx.moveTo(x, points[i++]);
                 ctx.lineTo(x, points[i++]);
             }
@@ -341,15 +341,15 @@ class LargeBoxPath extends Path {
 }
 
 function createLarge(seriesModel: CandlestickSeriesModel, group: graphic.Group, incremental?: boolean) {
-    var data = seriesModel.getData();
-    var largePoints = data.getLayout('largePoints');
+    let data = seriesModel.getData();
+    let largePoints = data.getLayout('largePoints');
 
-    var elP = new LargeBoxPath({
+    let elP = new LargeBoxPath({
         shape: {points: largePoints},
         __sign: 1
     });
     group.add(elP);
-    var elN = new LargeBoxPath({
+    let elN = new LargeBoxPath({
         shape: {points: largePoints},
         __sign: -1
     });
@@ -365,13 +365,13 @@ function createLarge(seriesModel: CandlestickSeriesModel, group: graphic.Group,
 }
 
 function setLargeStyle(sign: number, el: LargeBoxPath, seriesModel: CandlestickSeriesModel, data: List) {
-    var suffix = sign > 0 ? 'P' : 'N';
-    var borderColor = data.getVisual('borderColor' + suffix)
+    let suffix = sign > 0 ? 'P' : 'N';
+    let borderColor = data.getVisual('borderColor' + suffix)
         || data.getVisual('color' + suffix);
 
     // Color must be excluded.
     // Because symbol provide setColor individually to set fill and stroke
-    var itemStyle = seriesModel.getModel('itemStyle').getItemStyle(SKIP_PROPS);
+    let itemStyle = seriesModel.getModel('itemStyle').getItemStyle(SKIP_PROPS);
 
     el.useStyle(itemStyle);
     el.style.fill = null;
diff --git a/src/chart/candlestick/candlestickLayout.ts b/src/chart/candlestick/candlestickLayout.ts
index ae4d758..cf0fdd9 100644
--- a/src/chart/candlestick/candlestickLayout.ts
+++ b/src/chart/candlestick/candlestickLayout.ts
@@ -28,7 +28,7 @@ import CandlestickSeriesModel from './CandlestickSeries';
 import List from '../../data/List';
 import { RectLike } from 'zrender/src/core/BoundingRect';
 
-var LargeArr = typeof Float32Array !== 'undefined' ? Float32Array : Array;
+const LargeArr = typeof Float32Array !== 'undefined' ? Float32Array : Array;
 
 export interface CandlestickItemLayout {
     sign: number
@@ -50,18 +50,18 @@ const candlestickLayout: StageHandler = {
 
     reset: function (seriesModel: CandlestickSeriesModel) {
 
-        var coordSys = seriesModel.coordinateSystem;
-        var data = seriesModel.getData();
-        var candleWidth = calculateCandleWidth(seriesModel, data);
-        var cDimIdx = 0;
-        var vDimIdx = 1;
-        var coordDims = ['x', 'y'];
-        var cDim = data.mapDimension(coordDims[cDimIdx]);
-        var vDims = data.mapDimension(coordDims[vDimIdx], true);
-        var openDim = vDims[0];
-        var closeDim = vDims[1];
-        var lowestDim = vDims[2];
-        var highestDim = vDims[3];
+        let coordSys = seriesModel.coordinateSystem;
+        let data = seriesModel.getData();
+        let candleWidth = calculateCandleWidth(seriesModel, data);
+        let cDimIdx = 0;
+        let vDimIdx = 1;
+        let coordDims = ['x', 'y'];
+        let cDim = data.mapDimension(coordDims[cDimIdx]);
+        let vDims = data.mapDimension(coordDims[vDimIdx], true);
+        let openDim = vDims[0];
+        let closeDim = vDims[1];
+        let lowestDim = vDims[2];
+        let highestDim = vDims[3];
 
         data.setLayout({
             candleWidth: candleWidth,
@@ -79,24 +79,24 @@ const candlestickLayout: StageHandler = {
         };
 
         function normalProgress(params: StageHandlerProgressParams, data: List) {
-            var dataIndex;
+            let dataIndex;
             while ((dataIndex = params.next()) != null) {
 
-                var axisDimVal = data.get(cDim, dataIndex) as number;
-                var openVal = data.get(openDim, dataIndex) as number;
-                var closeVal = data.get(closeDim, dataIndex) as number;
-                var lowestVal = data.get(lowestDim, dataIndex) as number;
-                var highestVal = data.get(highestDim, dataIndex) as number;
+                let axisDimVal = data.get(cDim, dataIndex) as number;
+                let openVal = data.get(openDim, dataIndex) as number;
+                let closeVal = data.get(closeDim, dataIndex) as number;
+                let lowestVal = data.get(lowestDim, dataIndex) as number;
+                let highestVal = data.get(highestDim, dataIndex) as number;
 
-                var ocLow = Math.min(openVal, closeVal);
-                var ocHigh = Math.max(openVal, closeVal);
+                let ocLow = Math.min(openVal, closeVal);
+                let ocHigh = Math.max(openVal, closeVal);
 
-                var ocLowPoint = getPoint(ocLow, axisDimVal);
-                var ocHighPoint = getPoint(ocHigh, axisDimVal);
-                var lowestPoint = getPoint(lowestVal, axisDimVal);
-                var highestPoint = getPoint(highestVal, axisDimVal);
+                let ocLowPoint = getPoint(ocLow, axisDimVal);
+                let ocHighPoint = getPoint(ocHigh, axisDimVal);
+                let lowestPoint = getPoint(lowestVal, axisDimVal);
+                let highestPoint = getPoint(highestVal, axisDimVal);
 
-                var ends: number[][] = [];
+                let ends: number[][] = [];
                 addBodyEnd(ends, ocHighPoint, 0);
                 addBodyEnd(ends, ocLowPoint, 1);
 
@@ -117,7 +117,7 @@ const candlestickLayout: StageHandler = {
             }
 
             function getPoint(val: number, axisDimVal: number) {
-                var p = [];
+                let p = [];
                 p[cDimIdx] = axisDimVal;
                 p[vDimIdx] = val;
                 return (isNaN(axisDimVal) || isNaN(val))
@@ -126,8 +126,8 @@ const candlestickLayout: StageHandler = {
             }
 
             function addBodyEnd(ends: number[][], point: number[], start: number) {
-                var point1 = point.slice();
-                var point2 = point.slice();
+                let point1 = point.slice();
+                let point2 = point.slice();
 
                 point1[cDimIdx] = subPixelOptimize(
                     point1[cDimIdx] + candleWidth / 2, 1, false
@@ -142,8 +142,8 @@ const candlestickLayout: StageHandler = {
             }
 
             function makeBrushRect(lowestVal: number, highestVal: number, axisDimVal: number) {
-                var pmin = getPoint(lowestVal, axisDimVal);
-                var pmax = getPoint(highestVal, axisDimVal);
+                let pmin = getPoint(lowestVal, axisDimVal);
+                let pmax = getPoint(highestVal, axisDimVal);
 
                 pmin[cDimIdx] -= candleWidth / 2;
                 pmax[cDimIdx] -= candleWidth / 2;
@@ -164,19 +164,19 @@ const candlestickLayout: StageHandler = {
 
         function largeProgress(params: StageHandlerProgressParams, data: List) {
             // Structure: [sign, x, yhigh, ylow, sign, x, yhigh, ylow, ...]
-            var points = new LargeArr(params.count * 4);
-            var offset = 0;
-            var point;
-            var tmpIn: number[] = [];
-            var tmpOut: number[] = [];
-            var dataIndex;
+            let points = new LargeArr(params.count * 4);
+            let offset = 0;
+            let point;
+            let tmpIn: number[] = [];
+            let tmpOut: number[] = [];
+            let dataIndex;
 
             while ((dataIndex = params.next()) != null) {
-                var axisDimVal = data.get(cDim, dataIndex) as number;
-                var openVal = data.get(openDim, dataIndex) as number;
-                var closeVal = data.get(closeDim, dataIndex) as number;
-                var lowestVal = data.get(lowestDim, dataIndex) as number;
-                var highestVal = data.get(highestDim, dataIndex) as number;
+                let axisDimVal = data.get(cDim, dataIndex) as number;
+                let openVal = data.get(openDim, dataIndex) as number;
+                let closeVal = data.get(closeDim, dataIndex) as number;
+                let lowestVal = data.get(lowestDim, dataIndex) as number;
+                let highestVal = data.get(highestDim, dataIndex) as number;
 
                 if (isNaN(axisDimVal) || isNaN(lowestVal) || isNaN(highestVal)) {
                     points[offset++] = NaN;
@@ -203,7 +203,7 @@ const candlestickLayout: StageHandler = {
 };
 
 function getSign(data: List, dataIndex: number, openVal: number, closeVal: number, closeDim: string) {
-    var sign;
+    let sign;
     if (openVal > closeVal) {
         sign = -1;
     }
@@ -222,25 +222,25 @@ function getSign(data: List, dataIndex: number, openVal: number, closeVal: numbe
 }
 
 function calculateCandleWidth(seriesModel: CandlestickSeriesModel, data: List) {
-    var baseAxis = seriesModel.getBaseAxis();
-    var extent;
+    let baseAxis = seriesModel.getBaseAxis();
+    let extent;
 
-    var bandWidth = baseAxis.type === 'category'
+    let bandWidth = baseAxis.type === 'category'
         ? baseAxis.getBandWidth()
         : (
             extent = baseAxis.getExtent(),
             Math.abs(extent[1] - extent[0]) / data.count()
         );
 
-    var barMaxWidth = parsePercent(
+    let barMaxWidth = parsePercent(
         retrieve2(seriesModel.get('barMaxWidth'), bandWidth),
         bandWidth
     );
-    var barMinWidth = parsePercent(
+    let barMinWidth = parsePercent(
         retrieve2(seriesModel.get('barMinWidth'), 1),
         bandWidth
     );
-    var barWidth = seriesModel.get('barWidth');
+    let barWidth = seriesModel.get('barWidth');
 
     return barWidth != null
         ? parsePercent(barWidth, bandWidth)
diff --git a/src/chart/candlestick/candlestickVisual.ts b/src/chart/candlestick/candlestickVisual.ts
index d9696c0..443fa52 100644
--- a/src/chart/candlestick/candlestickVisual.ts
+++ b/src/chart/candlestick/candlestickVisual.ts
@@ -22,10 +22,10 @@ import { StageHandler } from '../../util/types';
 import CandlestickSeriesModel, { CandlestickDataItemOption } from './CandlestickSeries';
 import Model from '../../model/Model';
 
-var positiveBorderColorQuery = ['itemStyle', 'borderColor'] as const;
-var negativeBorderColorQuery = ['itemStyle', 'borderColor0'] as const;
-var positiveColorQuery = ['itemStyle', 'color'] as const;
-var negativeColorQuery = ['itemStyle', 'color0'] as const;
+const positiveBorderColorQuery = ['itemStyle', 'borderColor'] as const;
+const negativeBorderColorQuery = ['itemStyle', 'borderColor0'] as const;
+const positiveColorQuery = ['itemStyle', 'color'] as const;
+const negativeColorQuery = ['itemStyle', 'color0'] as const;
 
 const candlestickVisual: StageHandler = {
 
@@ -50,7 +50,7 @@ const candlestickVisual: StageHandler = {
             );
         }
 
-        var data = seriesModel.getData();
+        let data = seriesModel.getData();
 
         data.setVisual({
             legendSymbol: 'roundRect',
@@ -65,13 +65,13 @@ const candlestickVisual: StageHandler = {
             return;
         }
 
-        var isLargeRender = seriesModel.pipelineContext.large;
+        let isLargeRender = seriesModel.pipelineContext.large;
         return !isLargeRender && {
             progress(params, data) {
-                var dataIndex;
+                let dataIndex;
                 while ((dataIndex = params.next()) != null) {
-                    var itemModel = data.getItemModel(dataIndex);
-                    var sign = data.getItemLayout(dataIndex).sign;
+                    let itemModel = data.getItemModel(dataIndex);
+                    let sign = data.getItemLayout(dataIndex).sign;
 
                     data.setItemVisual(
                         dataIndex,
diff --git a/src/chart/custom.ts b/src/chart/custom.ts
index d71b622..9369cc7 100644
--- a/src/chart/custom.ts
+++ b/src/chart/custom.ts
@@ -39,14 +39,14 @@ import prepareSingleAxis from '../coord/single/prepareCustom';
 import preparePolar from '../coord/polar/prepareCustom';
 import prepareCalendar from '../coord/calendar/prepareCustom';
 
-var CACHED_LABEL_STYLE_PROPERTIES = graphicUtil.CACHED_LABEL_STYLE_PROPERTIES;
-var ITEM_STYLE_NORMAL_PATH = ['itemStyle'];
-var ITEM_STYLE_EMPHASIS_PATH = ['emphasis', 'itemStyle'];
-var LABEL_NORMAL = ['label'];
-var LABEL_EMPHASIS = ['emphasis', 'label'];
+const CACHED_LABEL_STYLE_PROPERTIES = graphicUtil.CACHED_LABEL_STYLE_PROPERTIES;
+const ITEM_STYLE_NORMAL_PATH = ['itemStyle'];
+const ITEM_STYLE_EMPHASIS_PATH = ['emphasis', 'itemStyle'];
+const LABEL_NORMAL = ['label'];
+const LABEL_EMPHASIS = ['emphasis', 'label'];
 // Use prefix to avoid index to be the same as el.name,
 // which will cause weird udpate animation.
-var GROUP_DIFF_PREFIX = 'e\0\0';
+const GROUP_DIFF_PREFIX = 'e\0\0';
 
 
 /**
@@ -60,7 +60,7 @@ var GROUP_DIFF_PREFIX = 'e\0\0';
  *         size: function (dataSize, dataItem) {} // return size of each axis in coordSys.
  *     }}
  */
-var prepareCustoms = {
+const prepareCustoms = {
     cartesian2d: prepareCartesian2d,
     geo: prepareGeo,
     singleAxis: prepareSingleAxis,
@@ -118,7 +118,7 @@ SeriesModel.extend({
      * @override
      */
     getDataParams: function (dataIndex, dataType, el) {
-        var params = SeriesModel.prototype.getDataParams.apply(this, arguments);
+        let params = SeriesModel.prototype.getDataParams.apply(this, arguments);
         el && (params.info = el.info);
         return params;
     }
@@ -142,10 +142,10 @@ ChartView.extend({
      * @override
      */
     render: function (customSeries, ecModel, api, payload) {
-        var oldData = this._data;
-        var data = customSeries.getData();
-        var group = this.group;
-        var renderItem = makeRenderItem(customSeries, data, ecModel, api);
+        let oldData = this._data;
+        let data = customSeries.getData();
+        let group = this.group;
+        let renderItem = makeRenderItem(customSeries, data, ecModel, api);
 
         // By default, merge mode is applied. In most cases, custom series is
         // used in the scenario that data amount is not large but graphic elements
@@ -159,19 +159,19 @@ ChartView.extend({
                 );
             })
             .update(function (newIdx, oldIdx) {
-                var el = oldData.getItemGraphicEl(oldIdx);
+                let el = oldData.getItemGraphicEl(oldIdx);
                 createOrUpdate(
                     el, newIdx, renderItem(newIdx, payload), customSeries, group, data
                 );
             })
             .remove(function (oldIdx) {
-                var el = oldData.getItemGraphicEl(oldIdx);
+                let el = oldData.getItemGraphicEl(oldIdx);
                 el && group.remove(el);
             })
             .execute();
 
         // Do clipping
-        var clipPath = customSeries.get('clip', true)
+        let clipPath = customSeries.get('clip', true)
             ? createClipPath(customSeries.coordinateSystem, false, customSeries)
             : null;
         if (clipPath) {
@@ -190,16 +190,16 @@ ChartView.extend({
     },
 
     incrementalRender: function (params, customSeries, ecModel, api, payload) {
-        var data = customSeries.getData();
-        var renderItem = makeRenderItem(customSeries, data, ecModel, api);
+        let data = customSeries.getData();
+        let renderItem = makeRenderItem(customSeries, data, ecModel, api);
         function setIncrementalAndHoverLayer(el) {
             if (!el.isGroup) {
                 el.incremental = true;
                 el.useHoverLayer = true;
             }
         }
-        for (var idx = params.start; idx < params.end; idx++) {
-            var el = createOrUpdate(null, idx, renderItem(idx, payload), customSeries, this.group, data);
+        for (let idx = params.start; idx < params.end; idx++) {
+            let el = createOrUpdate(null, idx, renderItem(idx, payload), customSeries, this.group, data);
             el.traverse(setIncrementalAndHoverLayer);
         }
     },
@@ -215,7 +215,7 @@ ChartView.extend({
     filterForExposedEvent: function (
         eventType: string, query: EventQueryItem, targetEl: Element, packedEvent: ECEvent
     ): boolean {
-        var elementName = query.element;
+        let elementName = query.element;
         if (elementName == null || targetEl.name === elementName) {
             return true;
         }
@@ -234,15 +234,15 @@ ChartView.extend({
 
 
 function createEl(elOption) {
-    var graphicType = elOption.type;
-    var el;
+    let graphicType = elOption.type;
+    let el;
 
     // Those graphic elements are not shapes. They should not be
     // overwritten by users, so do them first.
     if (graphicType === 'path') {
-        var shape = elOption.shape;
+        let shape = elOption.shape;
         // Using pathRect brings convenience to users sacle svg path.
-        var pathRect = (shape.width != null && shape.height != null)
+        let pathRect = (shape.width != null && shape.height != null)
             ? {
                 x: shape.x || 0,
                 y: shape.y || 0,
@@ -250,7 +250,7 @@ function createEl(elOption) {
                 height: shape.height
             }
             : null;
-        var pathData = getPathData(shape);
+        let pathData = getPathData(shape);
         // Path is also used for icon, so layout 'center' by default.
         el = graphicUtil.makePath(pathData, null, pathRect, shape.layout || 'center');
         el.__customPathData = pathData;
@@ -270,7 +270,7 @@ function createEl(elOption) {
         throw new Error('"compoundPath" is not supported yet.');
     }
     else {
-        var Clz = graphicUtil.getShapeClass(graphicType);
+        let Clz = graphicUtil.getShapeClass(graphicType);
 
         if (__DEV__) {
             zrUtil.assert(Clz, 'graphic type "' + graphicType + '" can not be found.');
@@ -286,8 +286,8 @@ function createEl(elOption) {
 }
 
 function updateEl(el, dataIndex, elOption, animatableModel, data, isInit, isRoot) {
-    var transitionProps = {};
-    var elOptionStyle = elOption.style || {};
+    let transitionProps = {};
+    let elOptionStyle = elOption.style || {};
 
     elOption.shape && (transitionProps.shape = zrUtil.clone(elOption.shape));
     elOption.position && (transitionProps.position = elOption.position.slice());
@@ -323,7 +323,7 @@ function updateEl(el, dataIndex, elOption, animatableModel, data, isInit, isRoot
         // Init animation.
         if (isInit) {
             el.style.opacity = 0;
-            var targetOpacity = elOptionStyle.opacity;
+            let targetOpacity = elOptionStyle.opacity;
             targetOpacity == null && (targetOpacity = 1);
             graphicUtil.initProps(el, {style: {opacity: targetOpacity}}, animatableModel, dataIndex);
         }
@@ -349,7 +349,7 @@ function updateEl(el, dataIndex, elOption, animatableModel, data, isInit, isRoot
 
     // If `elOption.styleEmphasis` is `false`, remove hover style. The
     // logic is ensured by `graphicUtil.setElementHoverStyle`.
-    var styleEmphasis = elOption.styleEmphasis;
+    let styleEmphasis = elOption.styleEmphasis;
     // hoverStyle should always be set here, because if the hover style
     // may already be changed, where the inner cache should be reset.
     graphicUtil.setElementHoverStyle(el, styleEmphasis);
@@ -366,9 +366,9 @@ function prepareStyleTransition(prop, targetStyle, elOptionStyle, oldElStyle, is
 }
 
 function makeRenderItem(customSeries, data, ecModel, api) {
-    var renderItem = customSeries.get('renderItem');
-    var coordSys = customSeries.coordinateSystem;
-    var prepareResult = {};
+    let renderItem = customSeries.get('renderItem');
+    let coordSys = customSeries.coordinateSystem;
+    let prepareResult = {};
 
     if (coordSys) {
         if (__DEV__) {
@@ -384,7 +384,7 @@ function makeRenderItem(customSeries, data, ecModel, api) {
             : prepareCustoms[coordSys.type](coordSys);
     }
 
-    var userAPI = zrUtil.defaults({
+    let userAPI = zrUtil.defaults({
         getWidth: api.getWidth,
         getHeight: api.getHeight,
         getZr: api.getZr,
@@ -398,7 +398,7 @@ function makeRenderItem(customSeries, data, ecModel, api) {
         font: font
     }, prepareResult.api || {});
 
-    var userParams = {
+    let userParams = {
         // The life cycle of context: current round of rendering.
         // The global life cycle is probably not necessary, because
         // user can store global status by themselves.
@@ -412,12 +412,12 @@ function makeRenderItem(customSeries, data, ecModel, api) {
     };
 
     // Do not support call `api` asynchronously without dataIndexInside input.
-    var currDataIndexInside;
-    var currDirty = true;
-    var currItemModel;
-    var currLabelNormalModel;
-    var currLabelEmphasisModel;
-    var currVisualColor;
+    let currDataIndexInside;
+    let currDirty = true;
+    let currItemModel;
+    let currLabelNormalModel;
+    let currLabelEmphasisModel;
+    let currVisualColor;
 
     return function (dataIndexInside, payload) {
         currDataIndexInside = dataIndexInside;
@@ -471,13 +471,13 @@ function makeRenderItem(customSeries, data, ecModel, api) {
         dataIndexInside == null && (dataIndexInside = currDataIndexInside);
         updateCache(dataIndexInside);
 
-        var itemStyle = currItemModel.getModel(ITEM_STYLE_NORMAL_PATH).getItemStyle();
+        let itemStyle = currItemModel.getModel(ITEM_STYLE_NORMAL_PATH).getItemStyle();
 
         currVisualColor != null && (itemStyle.fill = currVisualColor);
-        var opacity = data.getItemVisual(dataIndexInside, 'opacity');
+        let opacity = data.getItemVisual(dataIndexInside, 'opacity');
         opacity != null && (itemStyle.opacity = opacity);
 
-        var labelModel = extra
+        let labelModel = extra
             ? applyExtraBefore(extra, currLabelNormalModel)
             : currLabelNormalModel;
 
@@ -507,9 +507,9 @@ function makeRenderItem(customSeries, data, ecModel, api) {
         dataIndexInside == null && (dataIndexInside = currDataIndexInside);
         updateCache(dataIndexInside);
 
-        var itemStyle = currItemModel.getModel(ITEM_STYLE_EMPHASIS_PATH).getItemStyle();
+        let itemStyle = currItemModel.getModel(ITEM_STYLE_EMPHASIS_PATH).getItemStyle();
 
-        var labelModel = extra
+        let labelModel = extra
             ? applyExtraBefore(extra, currLabelEmphasisModel)
             : currLabelEmphasisModel;
 
@@ -552,7 +552,7 @@ function makeRenderItem(customSeries, data, ecModel, api) {
      */
     function barLayout(opt) {
         if (coordSys.getBaseAxis) {
-            var baseAxis = coordSys.getBaseAxis();
+            let baseAxis = coordSys.getBaseAxis();
             return getLayoutOnAxis(zrUtil.defaults({axis: baseAxis}, opt), api);
         }
     }
@@ -580,12 +580,12 @@ function makeRenderItem(customSeries, data, ecModel, api) {
 }
 
 function wrapEncodeDef(data) {
-    var encodeDef = {};
+    let encodeDef = {};
     zrUtil.each(data.dimensions, function (dimName, dataDimIndex) {
-        var dimInfo = data.getDimensionInfo(dimName);
+        let dimInfo = data.getDimensionInfo(dimName);
         if (!dimInfo.isExtraCoord) {
-            var coordDim = dimInfo.coordDim;
-            var dataDims = encodeDef[coordDim] = encodeDef[coordDim] || [];
+            let coordDim = dimInfo.coordDim;
+            let dataDims = encodeDef[coordDim] = encodeDef[coordDim] || [];
             dataDims[dimInfo.coordDimIndex] = dataDimIndex;
         }
     });
@@ -611,11 +611,11 @@ function doCreateOrUpdate(el, dataIndex, elOption, animatableModel, group, data,
     //     regard "return;" as "show nothing element whatever", so make a exception to meet the
     //     most cases.)
 
-    var simplyRemove = !elOption; // `null`/`undefined`/`false`
+    let simplyRemove = !elOption; // `null`/`undefined`/`false`
     elOption = elOption || {};
-    var elOptionType = elOption.type;
-    var elOptionShape = elOption.shape;
-    var elOptionStyle = elOption.style;
+    let elOptionType = elOption.type;
+    let elOptionShape = elOption.shape;
+    let elOptionStyle = elOption.style;
 
     if (el && (
         simplyRemove
@@ -644,7 +644,7 @@ function doCreateOrUpdate(el, dataIndex, elOption, animatableModel, group, data,
         return;
     }
 
-    var isInit = !el;
+    let isInit = !el;
     !el && (el = createEl(elOption));
     updateEl(el, dataIndex, elOption, animatableModel, data, isInit, isRoot);
 
@@ -675,12 +675,12 @@ function doCreateOrUpdate(el, dataIndex, elOption, animatableModel, group, data,
 // User can remove a single child by set its `ignore` as `true` or replace
 // it by another element, where its `$merge` can be set as `true` if necessary.
 function mergeChildren(el, dataIndex, elOption, animatableModel, data) {
-    var newChildren = elOption.children;
-    var newLen = newChildren ? newChildren.length : 0;
-    var mergeChildren = elOption.$mergeChildren;
+    let newChildren = elOption.children;
+    let newLen = newChildren ? newChildren.length : 0;
+    let mergeChildren = elOption.$mergeChildren;
     // `diffChildrenByName` has been deprecated.
-    var byName = mergeChildren === 'byName' || elOption.diffChildrenByName;
-    var notMerge = mergeChildren === false;
+    let byName = mergeChildren === 'byName' || elOption.diffChildrenByName;
+    let notMerge = mergeChildren === false;
 
     // For better performance on roam update, only enter if necessary.
     if (!newLen && !byName && !notMerge) {
@@ -703,7 +703,7 @@ function mergeChildren(el, dataIndex, elOption, animatableModel, data) {
 
     // Mapping children of a group simply by index, which
     // might be better performance.
-    var index = 0;
+    let index = 0;
     for (; index < newLen; index++) {
         newChildren[index] && doCreateOrUpdate(
             el.childAt(index),
@@ -737,14 +737,14 @@ function diffGroupChildren(context) {
 }
 
 function getKey(item, idx) {
-    var name = item && item.name;
+    let name = item && item.name;
     return name != null ? name : GROUP_DIFF_PREFIX + idx;
 }
 
 function processAddUpdate(newIndex, oldIndex) {
-    var context = this.context;
-    var childOption = newIndex != null ? context.newChildren[newIndex] : null;
-    var child = oldIndex != null ? context.oldChildren[oldIndex] : null;
+    let context = this.context;
+    let childOption = newIndex != null ? context.newChildren[newIndex] : null;
+    let child = oldIndex != null ? context.oldChildren[oldIndex] : null;
 
     doCreateOrUpdate(
         child,
@@ -760,7 +760,7 @@ function processAddUpdate(newIndex, oldIndex) {
 // textFill, textStroke, textStrokeWidth.
 // We have to do this trick.
 function applyExtraBefore(extra, model) {
-    var dummyModel = new Model({}, model);
+    let dummyModel = new Model({}, model);
     zrUtil.each(CACHED_LABEL_STYLE_PROPERTIES, function (stylePropName, modelPropName) {
         if (extra.hasOwnProperty(stylePropName)) {
             dummyModel.option[modelPropName] = extra[stylePropName];
@@ -770,7 +770,7 @@ function applyExtraBefore(extra, model) {
 }
 
 function applyExtraAfter(itemStyle, extra) {
-    for (var key in extra) {
+    for (let key in extra) {
         if (extra.hasOwnProperty(key)
             || !CACHED_LABEL_STYLE_PROPERTIES.hasOwnProperty(key)
         ) {
@@ -780,8 +780,8 @@ function applyExtraAfter(itemStyle, extra) {
 }
 
 function processRemove(oldIndex) {
-    var context = this.context;
-    var child = context.oldChildren[oldIndex];
+    let context = this.context;
+    let child = context.oldChildren[oldIndex];
     child && context.group.remove(child);
 }
 
diff --git a/src/chart/effectScatter/EffectScatterView.ts b/src/chart/effectScatter/EffectScatterView.ts
index 95ab025..a95d015 100644
--- a/src/chart/effectScatter/EffectScatterView.ts
+++ b/src/chart/effectScatter/EffectScatterView.ts
@@ -39,18 +39,18 @@ class EffectScatterView extends ChartView {
     }
 
     render(seriesModel: EffectScatterSeriesModel, ecModel: GlobalModel, api: ExtensionAPI) {
-        var data = seriesModel.getData();
-        var effectSymbolDraw = this._symbolDraw;
+        let data = seriesModel.getData();
+        let effectSymbolDraw = this._symbolDraw;
         effectSymbolDraw.updateData(data);
         this.group.add(effectSymbolDraw.group);
     }
 
     updateTransform(seriesModel: EffectScatterSeriesModel, ecModel: GlobalModel, api: ExtensionAPI) {
-        var data = seriesModel.getData();
+        let data = seriesModel.getData();
 
         this.group.dirty();
 
-        var res = pointsLayout().reset(seriesModel, ecModel, api) as StageHandlerProgressExecutor;
+        let res = pointsLayout().reset(seriesModel, ecModel, api) as StageHandlerProgressExecutor;
         if (res.progress) {
             res.progress({
                 start: 0,
@@ -63,7 +63,7 @@ class EffectScatterView extends ChartView {
     }
 
     _updateGroupTransform(seriesModel: EffectScatterSeriesModel) {
-        var coordSys = seriesModel.coordinateSystem;
+        let coordSys = seriesModel.coordinateSystem;
         if (coordSys && coordSys.getRoamTransform) {
             this.group.transform = matrix.clone(coordSys.getRoamTransform());
             this.group.decomposeTransform();
diff --git a/src/chart/funnel/FunnelSeries.ts b/src/chart/funnel/FunnelSeries.ts
index 5fd6fae..17ea344 100644
--- a/src/chart/funnel/FunnelSeries.ts
+++ b/src/chart/funnel/FunnelSeries.ts
@@ -118,8 +118,8 @@ class FunnelSeriesModel extends SeriesModel<FunnelSeriesOption> {
         // Extend labelLine emphasis
         defaultEmphasis(option, 'labelLine', ['show']);
 
-        var labelLineNormalOpt = option.labelLine;
-        var labelLineEmphasisOpt = option.emphasis.labelLine;
+        let labelLineNormalOpt = option.labelLine;
+        let labelLineEmphasisOpt = option.emphasis.labelLine;
         // Not show label line if `label.normal.show = false`
         labelLineNormalOpt.show = labelLineNormalOpt.show
             && option.label.show;
@@ -129,10 +129,10 @@ class FunnelSeriesModel extends SeriesModel<FunnelSeriesOption> {
 
     // Overwrite
     getDataParams(dataIndex: number) {
-        var data = this.getData();
-        var params = super.getDataParams(dataIndex);
-        var valueDim = data.mapDimension('value');
-        var sum = data.getSum(valueDim);
+        let data = this.getData();
+        let params = super.getDataParams(dataIndex);
+        let valueDim = data.mapDimension('value');
+        let sum = data.getSum(valueDim);
         // Percent is 0 if sum is 0
         params.percent = !sum ? 0 : +(data.get(valueDim, dataIndex) as number / sum * 100).toFixed(2);
 
diff --git a/src/chart/funnel/FunnelView.ts b/src/chart/funnel/FunnelView.ts
index 838924e..cc1a24f 100644
--- a/src/chart/funnel/FunnelView.ts
+++ b/src/chart/funnel/FunnelView.ts
@@ -41,9 +41,9 @@ class FunnelPiece extends graphic.Group {
     constructor(data: List, idx: number) {
         super();
 
-        var polygon = new graphic.Polygon();
-        var labelLine = new graphic.Polyline();
-        var text = new graphic.Text();
+        let polygon = new graphic.Polygon();
+        let labelLine = new graphic.Polyline();
+        let text = new graphic.Text();
         this.add(polygon);
         this.add(labelLine);
         this.add(text);
@@ -53,8 +53,8 @@ class FunnelPiece extends graphic.Group {
 
     highDownOnUpdate(fromState: DisplayState, toState: DisplayState) {
 
-        var labelLine = this.childAt(1) as graphic.Polyline;
-        var text = this.childAt(2) as graphic.Text;
+        let labelLine = this.childAt(1) as graphic.Polyline;
+        let text = this.childAt(2) as graphic.Text;
 
         if (toState === 'emphasis') {
             labelLine.ignore = (labelLine as FunnelLabelEl).hoverIgnore;
@@ -68,12 +68,12 @@ class FunnelPiece extends graphic.Group {
 
     updateData(data: List, idx: number, firstCreate?: boolean) {
 
-        var polygon = this.childAt(0) as graphic.Polygon;
+        let polygon = this.childAt(0) as graphic.Polygon;
 
-        var seriesModel = data.hostModel;
-        var itemModel = data.getItemModel<FunnelDataItemOption>(idx);
-        var layout = data.getItemLayout(idx);
-        var opacity = itemModel.get(opacityAccessPath);
+        let seriesModel = data.hostModel;
+        let itemModel = data.getItemModel<FunnelDataItemOption>(idx);
+        let layout = data.getItemLayout(idx);
+        let opacity = itemModel.get(opacityAccessPath);
         opacity = opacity == null ? 1 : opacity;
 
         // Reset style
@@ -102,8 +102,8 @@ class FunnelPiece extends graphic.Group {
         }
 
         // Update common style
-        var itemStyleModel = itemModel.getModel('itemStyle');
-        var visualColor = data.getItemVisual(idx, 'color');
+        let itemStyleModel = itemModel.getModel('itemStyle');
+        let visualColor = data.getItemVisual(idx, 'color');
 
         polygon.setStyle(
             zrUtil.defaults(
@@ -123,14 +123,14 @@ class FunnelPiece extends graphic.Group {
 
     _updateLabel(data: List, idx: number) {
 
-        var labelLine = this.childAt(1) as graphic.Polyline;
-        var labelText = this.childAt(2) as graphic.Text;
+        let labelLine = this.childAt(1) as graphic.Polyline;
+        let labelText = this.childAt(2) as graphic.Text;
 
-        var seriesModel = data.hostModel;
-        var itemModel = data.getItemModel<FunnelDataItemOption>(idx);
-        var layout = data.getItemLayout(idx);
-        var labelLayout = layout.label;
-        // var visualColor = data.getItemVisual(idx, 'color');
+        let seriesModel = data.hostModel;
+        let itemModel = data.getItemModel<FunnelDataItemOption>(idx);
+        let layout = data.getItemLayout(idx);
+        let labelLayout = layout.label;
+        // let visualColor = data.getItemVisual(idx, 'color');
 
         graphic.updateProps(labelLine, {
             shape: {
@@ -150,11 +150,11 @@ class FunnelPiece extends graphic.Group {
             z2: 10
         });
 
-        var labelModel = itemModel.getModel('label');
-        var labelHoverModel = itemModel.getModel(['emphasis', 'label']);
-        var labelLineModel = itemModel.getModel('labelLine');
-        var labelLineHoverModel = itemModel.getModel(['emphasis', 'labelLine']);
-        var visualColor = data.getItemVisual(idx, 'color');
+        let labelModel = itemModel.getModel('label');
+        let labelHoverModel = itemModel.getModel(['emphasis', 'label']);
+        let labelLineModel = itemModel.getModel('labelLine');
+        let labelLineHoverModel = itemModel.getModel(['emphasis', 'labelLine']);
+        let visualColor = data.getItemVisual(idx, 'color');
 
         graphic.setLabelStyle(
             labelText.style, labelText.hoverStyle = {}, labelModel, labelHoverModel,
@@ -194,21 +194,21 @@ class FunnelView extends ChartView {
     private _data: List;
 
     render(seriesModel: FunnelSeriesModel, ecModel: GlobalModel, api: ExtensionAPI) {
-        var data = seriesModel.getData();
-        var oldData = this._data;
+        let data = seriesModel.getData();
+        let oldData = this._data;
 
-        var group = this.group;
+        let group = this.group;
 
         data.diff(oldData)
             .add(function (idx) {
-                var funnelPiece = new FunnelPiece(data, idx);
+                let funnelPiece = new FunnelPiece(data, idx);
 
                 data.setItemGraphicEl(idx, funnelPiece);
 
                 group.add(funnelPiece);
             })
             .update(function (newIdx, oldIdx) {
-                var piece = oldData.getItemGraphicEl(oldIdx) as FunnelPiece;
+                let piece = oldData.getItemGraphicEl(oldIdx) as FunnelPiece;
 
                 piece.updateData(data, newIdx);
 
@@ -216,7 +216,7 @@ class FunnelView extends ChartView {
                 data.setItemGraphicEl(newIdx, piece);
             })
             .remove(function (idx) {
-                var piece = oldData.getItemGraphicEl(idx);
+                let piece = oldData.getItemGraphicEl(idx);
                 group.remove(piece);
             })
             .execute();
diff --git a/src/chart/funnel/funnelLayout.ts b/src/chart/funnel/funnelLayout.ts
index d84dab3..385d2a3 100644
--- a/src/chart/funnel/funnelLayout.ts
+++ b/src/chart/funnel/funnelLayout.ts
@@ -37,13 +37,13 @@ function getViewRect(seriesModel: FunnelSeriesModel, api: ExtensionAPI) {
 }
 
 function getSortedIndices(data: List, sort: FunnelSeriesOption['sort']) {
-    var valueDim = data.mapDimension('value');
-    var valueArr = data.mapArray(valueDim, function (val: number) {
+    let valueDim = data.mapDimension('value');
+    let valueArr = data.mapArray(valueDim, function (val: number) {
         return val;
     });
-    var indices: number[] = [];
-    var isAscending = sort === 'ascending';
-    for (var i = 0, len = data.count(); i < len; i++) {
+    let indices: number[] = [];
+    let isAscending = sort === 'ascending';
+    for (let i = 0, len = data.count(); i < len; i++) {
         indices[i] = i;
     }
 
@@ -63,23 +63,23 @@ function getSortedIndices(data: List, sort: FunnelSeriesOption['sort']) {
 
 function labelLayout(data: List) {
     data.each(function (idx) {
-        var itemModel = data.getItemModel(idx) as Model<FunnelDataItem>;
-        var labelModel = itemModel.getModel('label');
-        var labelPosition = labelModel.get('position');
+        let itemModel = data.getItemModel(idx) as Model<FunnelDataItem>;
+        let labelModel = itemModel.getModel('label');
+        let labelPosition = labelModel.get('position');
 
-        var labelLineModel = itemModel.getModel('labelLine');
+        let labelLineModel = itemModel.getModel('labelLine');
 
-        var layout = data.getItemLayout(idx);
-        var points = layout.points;
+        let layout = data.getItemLayout(idx);
+        let points = layout.points;
 
-        var isLabelInside = labelPosition === 'inner'
+        let isLabelInside = labelPosition === 'inner'
             || labelPosition === 'inside' || labelPosition === 'center'
             || labelPosition === 'insideLeft' || labelPosition === 'insideRight';
 
-        var textAlign;
-        var textX;
-        var textY;
-        var linePoints;
+        let textAlign;
+        let textX;
+        let textY;
+        let linePoints;
 
         if (isLabelInside) {
             if (labelPosition === 'insideLeft') {
@@ -102,10 +102,10 @@ function labelLayout(data: List) {
             ];
         }
         else {
-            var x1;
-            var y1;
-            var x2;
-            var labelLineLen = labelLineModel.get('length');
+            let x1;
+            let y1;
+            let x2;
+            let labelLineLen = labelLineModel.get('length');
             if (labelPosition === 'left') {
                 // Left side
                 x1 = (points[3][0] + points[0][0]) / 2;
@@ -162,7 +162,7 @@ function labelLayout(data: List) {
                 textX = x2 + 5;
                 textAlign = 'left';
             }
-            var y2 = y1;
+            let y2 = y1;
 
             linePoints = [[x1, y1], [x2, y2]];
             textY = y2;
@@ -181,19 +181,19 @@ function labelLayout(data: List) {
 
 export default function (ecModel: GlobalModel, api: ExtensionAPI) {
     ecModel.eachSeriesByType('funnel', function (seriesModel: FunnelSeriesModel) {
-        var data = seriesModel.getData();
-        var valueDim = data.mapDimension('value');
-        var sort = seriesModel.get('sort');
-        var viewRect = getViewRect(seriesModel, api);
-        var indices = getSortedIndices(data, sort);
+        let data = seriesModel.getData();
+        let valueDim = data.mapDimension('value');
+        let sort = seriesModel.get('sort');
+        let viewRect = getViewRect(seriesModel, api);
+        let indices = getSortedIndices(data, sort);
 
-        var sizeExtent = [
+        let sizeExtent = [
             parsePercent(seriesModel.get('minSize'), viewRect.width),
             parsePercent(seriesModel.get('maxSize'), viewRect.width)
         ];
-        var dataExtent = data.getDataExtent(valueDim);
-        var min = seriesModel.get('min');
-        var max = seriesModel.get('max');
+        let dataExtent = data.getDataExtent(valueDim);
+        let min = seriesModel.get('min');
+        let max = seriesModel.get('max');
         if (min == null) {
             min = Math.min(dataExtent[0], 0);
         }
@@ -201,17 +201,17 @@ export default function (ecModel: GlobalModel, api: ExtensionAPI) {
             max = dataExtent[1];
         }
 
-        var funnelAlign = seriesModel.get('funnelAlign');
-        var gap = seriesModel.get('gap');
-        var itemHeight = (viewRect.height - gap * (data.count() - 1)) / data.count();
+        let funnelAlign = seriesModel.get('funnelAlign');
+        let gap = seriesModel.get('gap');
+        let itemHeight = (viewRect.height - gap * (data.count() - 1)) / data.count();
 
-        var y = viewRect.y;
+        let y = viewRect.y;
 
-        var getLinePoints = function (idx: number, offY: number) {
+        let getLinePoints = function (idx: number, offY: number) {
             // End point index is data.count() and we assign it 0
-            var val = data.get(valueDim, idx) as number || 0;
-            var itemWidth = linearMap(val, [min, max], sizeExtent, true);
-            var x0;
+            let val = data.get(valueDim, idx) as number || 0;
+            let itemWidth = linearMap(val, [min, max], sizeExtent, true);
+            let x0;
             switch (funnelAlign) {
                 case 'left':
                     x0 = viewRect.x;
@@ -237,12 +237,12 @@ export default function (ecModel: GlobalModel, api: ExtensionAPI) {
             indices = indices.reverse();
         }
 
-        for (var i = 0; i < indices.length; i++) {
-            var idx = indices[i];
-            var nextIdx = indices[i + 1];
+        for (let i = 0; i < indices.length; i++) {
+            let idx = indices[i];
+            let nextIdx = indices[i + 1];
 
-            var itemModel = data.getItemModel<FunnelDataItem>(idx);
-            var height = itemModel.get(['itemStyle', 'height']);
+            let itemModel = data.getItemModel<FunnelDataItem>(idx);
+            let height = itemModel.get(['itemStyle', 'height']);
             if (height == null) {
                 height = itemHeight;
             }
@@ -253,8 +253,8 @@ export default function (ecModel: GlobalModel, api: ExtensionAPI) {
                 }
             }
 
-            var start = getLinePoints(idx, y);
-            var end = getLinePoints(nextIdx, y + height);
+            let start = getLinePoints(idx, y);
+            let end = getLinePoints(nextIdx, y + height);
 
             y += height + gap;
 
diff --git a/src/chart/gauge/GaugeView.ts b/src/chart/gauge/GaugeView.ts
index 1bc0c79..3921f1b 100644
--- a/src/chart/gauge/GaugeView.ts
+++ b/src/chart/gauge/GaugeView.ts
@@ -34,13 +34,13 @@ interface PosInfo {
 }
 
 function parsePosition(seriesModel: GaugeSeriesModel, api: ExtensionAPI): PosInfo {
-    var center = seriesModel.get('center');
-    var width = api.getWidth();
-    var height = api.getHeight();
-    var size = Math.min(width, height);
-    var cx = parsePercent(center[0], api.getWidth());
-    var cy = parsePercent(center[1], api.getHeight());
-    var r = parsePercent(seriesModel.get('radius'), size / 2);
+    let center = seriesModel.get('center');
+    let width = api.getWidth();
+    let height = api.getHeight();
+    let size = Math.min(width, height);
+    let cx = parsePercent(center[0], api.getWidth());
+    let cy = parsePercent(center[1], api.getHeight());
+    let r = parsePercent(seriesModel.get('radius'), size / 2);
 
     return {
         cx: cx,
@@ -63,7 +63,7 @@ function formatLabel(value: number, labelFormatter: string | ((value: number) =>
     return label;
 }
 
-var PI2 = Math.PI * 2;
+const PI2 = Math.PI * 2;
 
 class GaugeView extends ChartView {
     static type = 'gauge' as const;
@@ -75,8 +75,8 @@ class GaugeView extends ChartView {
 
         this.group.removeAll();
 
-        var colorList = seriesModel.get(['axisLine', 'lineStyle', 'color']);
-        var posInfo = parsePosition(seriesModel, api);
+        let colorList = seriesModel.get(['axisLine', 'lineStyle', 'color']);
+        let posInfo = parsePosition(seriesModel, api);
 
         this._renderMain(
             seriesModel, ecModel, api, colorList, posInfo
@@ -92,26 +92,26 @@ class GaugeView extends ChartView {
         colorList: [number, ColorString][],
         posInfo: PosInfo
     ) {
-        var group = this.group;
+        let group = this.group;
 
-        var axisLineModel = seriesModel.getModel('axisLine');
-        var lineStyleModel = axisLineModel.getModel('lineStyle');
+        let axisLineModel = seriesModel.getModel('axisLine');
+        let lineStyleModel = axisLineModel.getModel('lineStyle');
 
-        var clockwise = seriesModel.get('clockwise');
-        var startAngle = -seriesModel.get('startAngle') / 180 * Math.PI;
-        var endAngle = -seriesModel.get('endAngle') / 180 * Math.PI;
+        let clockwise = seriesModel.get('clockwise');
+        let startAngle = -seriesModel.get('startAngle') / 180 * Math.PI;
+        let endAngle = -seriesModel.get('endAngle') / 180 * Math.PI;
 
-        var angleRangeSpan = (endAngle - startAngle) % PI2;
+        let angleRangeSpan = (endAngle - startAngle) % PI2;
 
-        var prevEndAngle = startAngle;
-        var axisLineWidth = lineStyleModel.get('width');
-        var showAxis = axisLineModel.get('show');
+        let prevEndAngle = startAngle;
+        let axisLineWidth = lineStyleModel.get('width');
+        let showAxis = axisLineModel.get('show');
 
-        for (var i = 0; showAxis && i < colorList.length; i++) {
+        for (let i = 0; showAxis && i < colorList.length; i++) {
             // Clamp
-            var percent = Math.min(Math.max(colorList[i][0], 0), 1);
+            let percent = Math.min(Math.max(colorList[i][0], 0), 1);
             endAngle = startAngle + angleRangeSpan * percent;
-            var sector = new graphic.Sector({
+            let sector = new graphic.Sector({
                 shape: {
                     startAngle: prevEndAngle,
                     endAngle: endAngle,
@@ -139,12 +139,12 @@ class GaugeView extends ChartView {
             prevEndAngle = endAngle;
         }
 
-        var getColor = function (percent: number) {
+        let getColor = function (percent: number) {
             // Less than 0
             if (percent <= 0) {
                 return colorList[0][1];
             }
-            var i;
+            let i;
             for (i = 0; i < colorList.length; i++) {
                 if (colorList[i][0] >= percent
                     && (i === 0 ? 0 : colorList[i - 1][0]) < percent
@@ -157,7 +157,7 @@ class GaugeView extends ChartView {
         };
 
         if (!clockwise) {
-            var tmp = startAngle;
+            let tmp = startAngle;
             startAngle = endAngle;
             endAngle = tmp;
         }
@@ -190,44 +190,44 @@ class GaugeView extends ChartView {
         endAngle: number,
         clockwise: boolean
     ) {
-        var group = this.group;
-        var cx = posInfo.cx;
-        var cy = posInfo.cy;
-        var r = posInfo.r;
+        let group = this.group;
+        let cx = posInfo.cx;
+        let cy = posInfo.cy;
+        let r = posInfo.r;
 
-        var minVal = +seriesModel.get('min');
-        var maxVal = +seriesModel.get('max');
+        let minVal = +seriesModel.get('min');
+        let maxVal = +seriesModel.get('max');
 
-        var splitLineModel = seriesModel.getModel('splitLine');
-        var tickModel = seriesModel.getModel('axisTick');
-        var labelModel = seriesModel.getModel('axisLabel');
+        let splitLineModel = seriesModel.getModel('splitLine');
+        let tickModel = seriesModel.getModel('axisTick');
+        let labelModel = seriesModel.getModel('axisLabel');
 
-        var splitNumber = seriesModel.get('splitNumber');
-        var subSplitNumber = tickModel.get('splitNumber');
+        let splitNumber = seriesModel.get('splitNumber');
+        let subSplitNumber = tickModel.get('splitNumber');
 
-        var splitLineLen = parsePercent(
+        let splitLineLen = parsePercent(
             splitLineModel.get('length'), r
         );
-        var tickLen = parsePercent(
+        let tickLen = parsePercent(
             tickModel.get('length'), r
         );
 
-        var angle = startAngle;
-        var step = (endAngle - startAngle) / splitNumber;
-        var subStep = step / subSplitNumber;
+        let angle = startAngle;
+        let step = (endAngle - startAngle) / splitNumber;
+        let subStep = step / subSplitNumber;
 
-        var splitLineStyle = splitLineModel.getModel('lineStyle').getLineStyle();
-        var tickLineStyle = tickModel.getModel('lineStyle').getLineStyle();
+        let splitLineStyle = splitLineModel.getModel('lineStyle').getLineStyle();
+        let tickLineStyle = tickModel.getModel('lineStyle').getLineStyle();
 
-        var unitX;
-        var unitY;
+        let unitX;
+        let unitY;
 
-        for (var i = 0; i <= splitNumber; i++) {
+        for (let i = 0; i <= splitNumber; i++) {
             unitX = Math.cos(angle);
             unitY = Math.sin(angle);
             // Split line
             if (splitLineModel.get('show')) {
-                var splitLine = new graphic.Line({
+                let splitLine = new graphic.Line({
                     shape: {
                         x1: unitX * r + cx,
                         y1: unitY * r + cy,
@@ -248,12 +248,12 @@ class GaugeView extends ChartView {
 
             // Label
             if (labelModel.get('show')) {
-                var label = formatLabel(
+                let label = formatLabel(
                     round(i / splitNumber * (maxVal - minVal) + minVal),
                     labelModel.get('formatter')
                 );
-                var distance = labelModel.get('distance');
-                var autoColor = getColor(i / splitNumber);
+                let distance = labelModel.get('distance');
+                let autoColor = getColor(i / splitNumber);
 
                 group.add(new graphic.Text({
                     style: graphic.setTextStyle({}, labelModel, {
@@ -269,10 +269,10 @@ class GaugeView extends ChartView {
 
             // Axis tick
             if (tickModel.get('show') && i !== splitNumber) {
-                for (var j = 0; j <= subSplitNumber; j++) {
+                for (let j = 0; j <= subSplitNumber; j++) {
                     unitX = Math.cos(angle);
                     unitY = Math.sin(angle);
-                    var tickLine = new graphic.Line({
+                    let tickLine = new graphic.Line({
                         shape: {
                             x1: unitX * r + cx,
                             y1: unitY * r + cy,
@@ -311,8 +311,8 @@ class GaugeView extends ChartView {
         clockwise: boolean
     ) {
 
-        var group = this.group;
-        var oldData = this._data;
+        let group = this.group;
+        let oldData = this._data;
 
         if (!seriesModel.get(['pointer', 'show'])) {
             // Remove old element
@@ -322,15 +322,15 @@ class GaugeView extends ChartView {
             return;
         }
 
-        var valueExtent = [+seriesModel.get('min'), +seriesModel.get('max')];
-        var angleExtent = [startAngle, endAngle];
+        let valueExtent = [+seriesModel.get('min'), +seriesModel.get('max')];
+        let angleExtent = [startAngle, endAngle];
 
-        var data = seriesModel.getData();
-        var valueDim = data.mapDimension('value');
+        let data = seriesModel.getData();
+        let valueDim = data.mapDimension('value');
 
         data.diff(oldData)
             .add(function (idx) {
-                var pointer = new PointerPath({
+                let pointer = new PointerPath({
                     shape: {
                         angle: startAngle
                     }
@@ -346,7 +346,7 @@ class GaugeView extends ChartView {
                 data.setItemGraphicEl(idx, pointer);
             })
             .update(function (newIdx, oldIdx) {
-                var pointer = oldData.getItemGraphicEl(oldIdx) as PointerPath;
+                let pointer = oldData.getItemGraphicEl(oldIdx) as PointerPath;
 
                 graphic.updateProps(pointer, {
                     shape: {
@@ -358,14 +358,14 @@ class GaugeView extends ChartView {
                 data.setItemGraphicEl(newIdx, pointer);
             })
             .remove(function (idx) {
-                var pointer = oldData.getItemGraphicEl(idx);
+                let pointer = oldData.getItemGraphicEl(idx);
                 group.remove(pointer);
             })
             .execute();
 
         data.eachItemGraphicEl(function (pointer: PointerPath, idx) {
-            var itemModel = data.getItemModel<GaugeDataItemOption>(idx);
-            var pointerModel = itemModel.getModel('pointer');
+            let itemModel = data.getItemModel<GaugeDataItemOption>(idx);
+            let pointerModel = itemModel.getModel('pointer');
 
             pointer.setShape({
                 x: posInfo.cx,
@@ -399,18 +399,18 @@ class GaugeView extends ChartView {
         getColor: (percent: number) => ColorString,
         posInfo: PosInfo
     ) {
-        var data = seriesModel.getData();
-        var valueDim = data.mapDimension('value');
-        var titleModel = seriesModel.getModel('title');
+        let data = seriesModel.getData();
+        let valueDim = data.mapDimension('value');
+        let titleModel = seriesModel.getModel('title');
         if (titleModel.get('show')) {
-            var offsetCenter = titleModel.get('offsetCenter');
-            var x = posInfo.cx + parsePercent(offsetCenter[0], posInfo.r);
-            var y = posInfo.cy + parsePercent(offsetCenter[1], posInfo.r);
-
-            var minVal = +seriesModel.get('min');
-            var maxVal = +seriesModel.get('max');
-            var value = seriesModel.getData().get(valueDim, 0) as number;
-            var autoColor = getColor(
+            let offsetCenter = titleModel.get('offsetCenter');
+            let x = posInfo.cx + parsePercent(offsetCenter[0], posInfo.r);
+            let y = posInfo.cy + parsePercent(offsetCenter[1], posInfo.r);
+
+            let minVal = +seriesModel.get('min');
+            let maxVal = +seriesModel.get('max');
+            let value = seriesModel.getData().get(valueDim, 0) as number;
+            let autoColor = getColor(
                 linearMap(value, [minVal, maxVal], [0, 1], true)
             );
 
@@ -435,18 +435,18 @@ class GaugeView extends ChartView {
         getColor: (percent: number) => ColorString,
         posInfo: PosInfo
     ) {
-        var detailModel = seriesModel.getModel('detail');
-        var minVal = +seriesModel.get('min');
-        var maxVal = +seriesModel.get('max');
+        let detailModel = seriesModel.getModel('detail');
+        let minVal = +seriesModel.get('min');
+        let maxVal = +seriesModel.get('max');
         if (detailModel.get('show')) {
-            var offsetCenter = detailModel.get('offsetCenter');
-            var x = posInfo.cx + parsePercent(offsetCenter[0], posInfo.r);
-            var y = posInfo.cy + parsePercent(offsetCenter[1], posInfo.r);
-            var width = parsePercent(detailModel.get('width'), posInfo.r);
-            var height = parsePercent(detailModel.get('height'), posInfo.r);
-            var data = seriesModel.getData();
-            var value = data.get(data.mapDimension('value'), 0) as number;
-            var autoColor = getColor(
+            let offsetCenter = detailModel.get('offsetCenter');
+            let x = posInfo.cx + parsePercent(offsetCenter[0], posInfo.r);
+            let y = posInfo.cy + parsePercent(offsetCenter[1], posInfo.r);
+            let width = parsePercent(detailModel.get('width'), posInfo.r);
+            let height = parsePercent(detailModel.get('height'), posInfo.r);
+            let data = seriesModel.getData();
+            let value = data.get(data.mapDimension('value'), 0) as number;
+            let autoColor = getColor(
                 linearMap(value, [minVal, maxVal], [0, 1], true)
             );
 
diff --git a/src/chart/gauge/PointerPath.ts b/src/chart/gauge/PointerPath.ts
index 4d0543d..d35e901 100644
--- a/src/chart/gauge/PointerPath.ts
+++ b/src/chart/gauge/PointerPath.ts
@@ -42,14 +42,14 @@ export default class PointerPath extends Path<PointerPathProps> {
     }
 
     buildPath(ctx: CanvasRenderingContext2D, shape: PointerShape) {
-        var mathCos = Math.cos;
-        var mathSin = Math.sin;
+        let mathCos = Math.cos;
+        let mathSin = Math.sin;
 
-        var r = shape.r;
-        var width = shape.width;
-        var angle = shape.angle;
-        var x = shape.x - mathCos(angle) * width * (width >= r / 3 ? 1 : 2);
-        var y = shape.y - mathSin(angle) * width * (width >= r / 3 ? 1 : 2);
+        let r = shape.r;
+        let width = shape.width;
+        let angle = shape.angle;
+        let x = shape.x - mathCos(angle) * width * (width >= r / 3 ? 1 : 2);
+        let y = shape.y - mathSin(angle) * width * (width >= r / 3 ? 1 : 2);
 
         angle = shape.angle - Math.PI / 2;
         ctx.moveTo(x, y);
diff --git a/src/chart/graph/GraphSeries.ts b/src/chart/graph/GraphSeries.ts
index e2366e9..fa26fe5 100644
--- a/src/chart/graph/GraphSeries.ts
+++ b/src/chart/graph/GraphSeries.ts
@@ -226,7 +226,7 @@ class GraphSeriesModel extends SeriesModel<GraphSeriesOption> {
     init(option: GraphSeriesOption) {
         super.init.apply(this, arguments as any);
 
-        var self = this;
+        let self = this;
         function getCategoriesData() {
             return self._categoriesData;
         }
@@ -254,9 +254,9 @@ class GraphSeriesModel extends SeriesModel<GraphSeriesOption> {
     }
 
     getInitialData(option: GraphSeriesOption, ecModel: GlobalModel) {
-        var edges = option.edges || option.links || [];
-        var nodes = option.data || option.nodes || [];
-        var self = this;
+        let edges = option.edges || option.links || [];
+        let nodes = option.data || option.nodes || [];
+        let self = this;
 
         if (nodes && edges) {
             return createGraphFromNodeEdge(nodes, edges, this, true, beforeLink).data;
@@ -265,9 +265,9 @@ class GraphSeriesModel extends SeriesModel<GraphSeriesOption> {
         function beforeLink(nodeData: List, edgeData: List) {
             // Overwrite nodeData.getItemModel to
             nodeData.wrapMethod('getItemModel', function (model) {
-                var categoriesModels = self._categoriesModels;
-                var categoryIdx = model.getShallow('category');
-                var categoryModel = categoriesModels[categoryIdx];
+                let categoriesModels = self._categoriesModels;
+                let categoryIdx = model.getShallow('category');
+                let categoryModel = categoriesModels[categoryIdx];
                 if (categoryModel) {
                     categoryModel.parentModel = model.parentModel;
                     model.parentModel = categoryModel;
@@ -275,15 +275,15 @@ class GraphSeriesModel extends SeriesModel<GraphSeriesOption> {
                 return model;
             });
 
-            var edgeLabelModel = self.getModel('edgeLabel');
+            let edgeLabelModel = self.getModel('edgeLabel');
             // For option `edgeLabel` can be found by label.xxx.xxx on item mode.
-            var fakeSeriesModel = new Model(
+            let fakeSeriesModel = new Model(
                 {label: edgeLabelModel.option},
                 edgeLabelModel.parentModel,
                 ecModel
             );
-            var emphasisEdgeLabelModel = self.getModel(['emphasis', 'edgeLabel']);
-            var emphasisFakeSeriesModel = new Model(
+            let emphasisEdgeLabelModel = self.getModel(['emphasis', 'edgeLabel']);
+            let emphasisFakeSeriesModel = new Model(
                 {emphasis: {label: emphasisEdgeLabelModel.option}},
                 emphasisEdgeLabelModel.parentModel,
                 ecModel
@@ -322,16 +322,16 @@ class GraphSeriesModel extends SeriesModel<GraphSeriesOption> {
      */
     formatTooltip(dataIndex: number, multipleSeries: boolean, dataType: string) {
         if (dataType === 'edge') {
-            var nodeData = this.getData();
-            var params = this.getDataParams(dataIndex, dataType);
-            var edge = nodeData.graph.getEdgeByIndex(dataIndex);
-            var sourceName = nodeData.getName(edge.node1.dataIndex);
-            var targetName = nodeData.getName(edge.node2.dataIndex);
+            let nodeData = this.getData();
+            let params = this.getDataParams(dataIndex, dataType);
+            let edge = nodeData.graph.getEdgeByIndex(dataIndex);
+            let sourceName = nodeData.getName(edge.node1.dataIndex);
+            let targetName = nodeData.getName(edge.node2.dataIndex);
 
-            var html = [];
+            let html = [];
             sourceName != null && html.push(sourceName);
             targetName != null && html.push(targetName);
-            var htmlStr = encodeHTML(html.join(' > '));
+            let htmlStr = encodeHTML(html.join(' > '));
 
             if (params.value) {
                 htmlStr += ' : ' + encodeHTML(params.value);
@@ -344,13 +344,13 @@ class GraphSeriesModel extends SeriesModel<GraphSeriesOption> {
     }
 
     _updateCategoriesData() {
-        var categories = zrUtil.map(this.option.categories || [], function (category) {
+        let categories = zrUtil.map(this.option.categories || [], function (category) {
             // Data must has value
             return category.value != null ? category : zrUtil.extend({
                 value: 0
             }, category);
         });
-        var categoriesData = new List(['value'], this);
+        let categoriesData = new List(['value'], this);
         categoriesData.initData(categories);
 
         this._categoriesData = categoriesData;
diff --git a/src/chart/graph/GraphView.ts b/src/chart/graph/GraphView.ts
index be83329..e3fa615 100644
--- a/src/chart/graph/GraphView.ts
+++ b/src/chart/graph/GraphView.ts
@@ -58,7 +58,7 @@ function getItemOpacity(
     item: GraphNode | GraphEdge,
     opacityPath: typeof nodeOpacityPath | typeof lineOpacityPath
 ): number {
-    var opacity = item.getVisual('opacity');
+    let opacity = item.getVisual('opacity');
     return opacity != null
         ? opacity : item.getModel<any>().get(opacityPath);
 }
@@ -68,8 +68,8 @@ function fadeOutItem(
     opacityPath: typeof nodeOpacityPath | typeof lineOpacityPath,
     opacityRatio?: number
 ) {
-    var el = item.getGraphicEl() as Symbol;   // TODO Symbol?
-    var opacity = getItemOpacity(item, opacityPath);
+    let el = item.getGraphicEl() as Symbol;   // TODO Symbol?
+    let opacity = getItemOpacity(item, opacityPath);
 
     if (opacityRatio != null) {
         opacity == null && (opacity = 1);
@@ -79,7 +79,7 @@ function fadeOutItem(
     el.downplay && el.downplay();
     el.traverse(function (child: LineLabel) {
         if (!child.isGroup) {
-            var opct = child.lineLabelOriginalOpacity;
+            let opct = child.lineLabelOriginalOpacity;
             if (opct == null || opacityRatio != null) {
                 opct = opacity;
             }
@@ -92,8 +92,8 @@ function fadeInItem(
     item: GraphNode | GraphEdge,
     opacityPath: typeof nodeOpacityPath | typeof lineOpacityPath
 ) {
-    var opacity = getItemOpacity(item, opacityPath);
-    var el = item.getGraphicEl() as Symbol;
+    let opacity = getItemOpacity(item, opacityPath);
+    let el = item.getGraphicEl() as Symbol;
     // Should go back to normal opacity first, consider hoverLayer,
     // where current state is copied to elMirror, and support
     // emphasis opacity here.
@@ -124,9 +124,9 @@ class GraphView extends ChartView {
     private _layouting: boolean;
 
     init(ecModel: GlobalModel, api: ExtensionAPI) {
-        var symbolDraw = new SymbolDraw();
-        var lineDraw = new LineDraw();
-        var group = this.group;
+        let symbolDraw = new SymbolDraw();
+        let lineDraw = new LineDraw();
+        let group = this.group;
 
         this._controller = new RoamController(api.getZr());
         this._controllerHost = {
@@ -143,18 +143,18 @@ class GraphView extends ChartView {
     }
 
     render(seriesModel: GraphSeriesModel, ecModel: GlobalModel, api: ExtensionAPI) {
-        var graphView = this;
-        var coordSys = seriesModel.coordinateSystem;
+        let graphView = this;
+        let coordSys = seriesModel.coordinateSystem;
 
         this._model = seriesModel;
 
-        var symbolDraw = this._symbolDraw;
-        var lineDraw = this._lineDraw;
+        let symbolDraw = this._symbolDraw;
+        let lineDraw = this._lineDraw;
 
-        var group = this.group;
+        let group = this.group;
 
         if (isViewCoordSys(coordSys)) {
-            var groupNewProp = {
+            let groupNewProp = {
                 position: coordSys.position,
                 scale: coordSys.scale
             };
@@ -168,10 +168,10 @@ class GraphView extends ChartView {
         // Fix edge contact point with node
         adjustEdge(seriesModel.getGraph(), getNodeGlobalScale(seriesModel));
 
-        var data = seriesModel.getData();
+        let data = seriesModel.getData();
         symbolDraw.updateData(data);
 
-        var edgeData = seriesModel.getEdgeData();
+        let edgeData = seriesModel.getEdgeData();
         lineDraw.updateData(edgeData);
 
         this._updateNodeAndLinkScale();
@@ -179,17 +179,17 @@ class GraphView extends ChartView {
         this._updateController(seriesModel, ecModel, api);
 
         clearTimeout(this._layoutTimeout);
-        var forceLayout = seriesModel.forceLayout;
-        var layoutAnimation = seriesModel.get(['force', 'layoutAnimation']);
+        let forceLayout = seriesModel.forceLayout;
+        let layoutAnimation = seriesModel.get(['force', 'layoutAnimation']);
         if (forceLayout) {
             this._startForceLayoutIteration(forceLayout, layoutAnimation);
         }
 
         data.eachItemGraphicEl((el: Symbol, idx) => {
-            var itemModel = data.getItemModel(idx) as Model<GraphNodeItemOption>;
+            let itemModel = data.getItemModel(idx) as Model<GraphNodeItemOption>;
             // Update draggable
             el.off('drag').off('dragend');
-            var draggable = itemModel.get('draggable');
+            let draggable = itemModel.get('draggable');
             if (draggable) {
                 el.on('drag', () => {
                     if (forceLayout) {
@@ -228,7 +228,7 @@ class GraphView extends ChartView {
         });
 
         data.graph.eachEdge(function (edge) {
-            var el = edge.getGraphicEl();
+            let el = edge.getGraphicEl();
 
             (el as any)[FOCUS_ADJACENCY] && el.off('mouseover', (el as any)[FOCUS_ADJACENCY]);
             (el as any)[UNFOCUS_ADJACENCY] && el.off('mouseout', (el as any)[UNFOCUS_ADJACENCY]);
@@ -248,25 +248,25 @@ class GraphView extends ChartView {
             }
         });
 
-        var circularRotateLabel = seriesModel.get('layout') === 'circular'
+        let circularRotateLabel = seriesModel.get('layout') === 'circular'
             && seriesModel.get(['circular', 'rotateLabel']);
-        var cx = data.getLayout('cx');
-        var cy = data.getLayout('cy');
+        let cx = data.getLayout('cx');
+        let cy = data.getLayout('cy');
         data.eachItemGraphicEl(function (el: Symbol, idx) {
-            var itemModel = data.getItemModel<GraphNodeItemOption>(idx);
-            var labelRotate = itemModel.get(['label', 'rotate']) || 0;
-            var symbolPath = el.getSymbolPath();
+            let itemModel = data.getItemModel<GraphNodeItemOption>(idx);
+            let labelRotate = itemModel.get(['label', 'rotate']) || 0;
+            let symbolPath = el.getSymbolPath();
             if (circularRotateLabel) {
-                var pos = data.getItemLayout(idx);
-                var rad = Math.atan2(pos[1] - cy, pos[0] - cx);
+                let pos = data.getItemLayout(idx);
+                let rad = Math.atan2(pos[1] - cy, pos[0] - cx);
                 if (rad < 0) {
                     rad = Math.PI * 2 + rad;
                 }
-                var isLeft = pos[0] < cx;
+                let isLeft = pos[0] < cx;
                 if (isLeft) {
                     rad = rad - Math.PI;
                 }
-                var textPosition = isLeft ? 'left' : 'right';
+                let textPosition = isLeft ? 'left' : 'right';
                 graphic.modifyLabelStyle(
                     symbolPath,
                     {
@@ -299,7 +299,7 @@ class GraphView extends ChartView {
     }
 
     _dispatchUnfocus(api: ExtensionAPI) {
-        var self = this;
+        let self = this;
         this._clearTimer();
         this._unfocusDelayTimer = setTimeout(function () {
             self._unfocusDelayTimer = null;
@@ -324,13 +324,13 @@ class GraphView extends ChartView {
         api: ExtensionAPI,
         payload: FocusNodePayload
     ) {
-        var data = seriesModel.getData();
-        var graph = data.graph;
-        var dataIndex = payload.dataIndex;
-        var edgeDataIndex = payload.edgeDataIndex;
+        let data = seriesModel.getData();
+        let graph = data.graph;
+        let dataIndex = payload.dataIndex;
+        let edgeDataIndex = payload.edgeDataIndex;
 
-        var node = graph.getNodeByIndex(dataIndex);
-        var edge = graph.getEdgeByIndex(edgeDataIndex);
+        let node = graph.getNodeByIndex(dataIndex);
+        let edge = graph.getEdgeByIndex(edgeDataIndex);
 
         if (!node && !edge) {
             return;
@@ -364,7 +364,7 @@ class GraphView extends ChartView {
     unfocusNodeAdjacency(
         seriesModel: GraphSeriesModel
     ) {
-        var graph = seriesModel.getData().graph;
+        let graph = seriesModel.getData().graph;
 
         graph.eachNode(function (node) {
             fadeOutItem(node, nodeOpacityPath);
@@ -378,7 +378,7 @@ class GraphView extends ChartView {
         forceLayout: GraphSeriesModel['forceLayout'],
         layoutAnimation?: boolean
     ) {
-        var self = this;
+        let self = this;
         (function step() {
             forceLayout.step(function (stopped) {
                 self.updateLayout(self._model);
@@ -396,12 +396,12 @@ class GraphView extends ChartView {
         ecModel: GlobalModel,
         api: ExtensionAPI
     ) {
-        var controller = this._controller;
-        var controllerHost = this._controllerHost;
-        var group = this.group;
+        let controller = this._controller;
+        let controllerHost = this._controllerHost;
+        let group = this.group;
 
         controller.setPointerChecker(function (e, x, y) {
-            var rect = group.getBoundingRect();
+            let rect = group.getBoundingRect();
             rect.applyTransform(group.transform);
             return rect.contain(x, y)
                 && !onIrrelevantElement(e, api, seriesModel);
@@ -443,11 +443,11 @@ class GraphView extends ChartView {
     }
 
     _updateNodeAndLinkScale() {
-        var seriesModel = this._model;
-        var data = seriesModel.getData();
+        let seriesModel = this._model;
+        let data = seriesModel.getData();
 
-        var nodeScale = getNodeGlobalScale(seriesModel);
-        var invScale = [nodeScale, nodeScale];
+        let nodeScale = getNodeGlobalScale(seriesModel);
+        let invScale = [nodeScale, nodeScale];
 
         data.eachItemGraphicEl(function (el, idx) {
             el.attr('scale', invScale);
diff --git a/src/chart/graph/adjustEdge.ts b/src/chart/graph/adjustEdge.ts
index 4bed533..1186ee2 100644
--- a/src/chart/graph/adjustEdge.ts
+++ b/src/chart/graph/adjustEdge.ts
@@ -22,27 +22,27 @@ import * as vec2 from 'zrender/src/core/vector';
 import {getSymbolSize} from './graphHelper';
 import Graph from '../../data/Graph';
 
-var v1: number[] = [];
-var v2: number[] = [];
-var v3: number[] = [];
-var quadraticAt = curveTool.quadraticAt;
-var v2DistSquare = vec2.distSquare;
-var mathAbs = Math.abs;
+const v1: number[] = [];
+const v2: number[] = [];
+const v3: number[] = [];
+const quadraticAt = curveTool.quadraticAt;
+const v2DistSquare = vec2.distSquare;
+const mathAbs = Math.abs;
 function intersectCurveCircle(
     curvePoints: number[][],
     center: number[],
     radius: number
 ) {
-    var p0 = curvePoints[0];
-    var p1 = curvePoints[1];
-    var p2 = curvePoints[2];
+    let p0 = curvePoints[0];
+    let p1 = curvePoints[1];
+    let p2 = curvePoints[2];
 
-    var d = Infinity;
-    var t;
-    var radiusSquare = radius * radius;
-    var interval = 0.1;
+    let d = Infinity;
+    let t;
+    let radiusSquare = radius * radius;
+    let interval = 0.1;
 
-    for (var _t = 0.1; _t <= 0.9; _t += 0.1) {
+    for (let _t = 0.1; _t <= 0.9; _t += 0.1) {
         v1[0] = quadraticAt(p0[0], p1[0], p2[0], _t);
         v1[1] = quadraticAt(p0[1], p1[1], p2[1], _t);
         let diff = mathAbs(v2DistSquare(v1, center) - radiusSquare);
@@ -54,9 +54,9 @@ function intersectCurveCircle(
 
     // Assume the segment is monotone,Find root through Bisection method
     // At most 32 iteration
-    for (var i = 0; i < 32; i++) {
-        // var prev = t - interval;
-        var next = t + interval;
+    for (let i = 0; i < 32; i++) {
+        // let prev = t - interval;
+        let next = t + interval;
         // v1[0] = quadraticAt(p0[0], p1[0], p2[0], prev);
         // v1[1] = quadraticAt(p0[1], p1[1], p2[1], prev);
         v2[0] = quadraticAt(p0[0], p1[0], p2[0], t);
@@ -69,8 +69,8 @@ function intersectCurveCircle(
             break;
         }
 
-        // var prevDiff = v2DistSquare(v1, center) - radiusSquare;
-        var nextDiff = v2DistSquare(v3, center) - radiusSquare;
+        // let prevDiff = v2DistSquare(v1, center) - radiusSquare;
+        let nextDiff = v2DistSquare(v3, center) - radiusSquare;
 
         interval /= 2;
         if (diff < 0) {
@@ -96,17 +96,17 @@ function intersectCurveCircle(
 
 // Adjust edge to avoid
 export default function (graph: Graph, scale: number) {
-    var tmp0: number[] = [];
-    var quadraticSubdivide = curveTool.quadraticSubdivide;
-    var pts: number[][] = [[], [], []];
-    var pts2: number[][] = [[], []];
-    var v: number[] = [];
+    let tmp0: number[] = [];
+    let quadraticSubdivide = curveTool.quadraticSubdivide;
+    let pts: number[][] = [[], [], []];
+    let pts2: number[][] = [[], []];
+    let v: number[] = [];
     scale /= 2;
 
     graph.eachEdge(function (edge, idx) {
-        var linePoints = edge.getLayout();
-        var fromSymbol = edge.getVisual('fromSymbol');
-        var toSymbol = edge.getVisual('toSymbol');
+        let linePoints = edge.getLayout();
+        let fromSymbol = edge.getVisual('fromSymbol');
+        let toSymbol = edge.getVisual('toSymbol');
 
         if (!linePoints.__original) {
             linePoints.__original = [
@@ -117,7 +117,7 @@ export default function (graph: Graph, scale: number) {
                 linePoints.__original.push(vec2.clone(linePoints[2]));
             }
         }
-        var originalPoints = linePoints.__original;
+        let originalPoints = linePoints.__original;
         // Quadratic curve
         if (linePoints[2] != null) {
             vec2.copy(pts[0], originalPoints[0]);
diff --git a/src/chart/graph/categoryFilter.ts b/src/chart/graph/categoryFilter.ts
index 11edc30..08916fb 100644
--- a/src/chart/graph/categoryFilter.ts
+++ b/src/chart/graph/categoryFilter.ts
@@ -22,28 +22,28 @@ import GraphSeriesModel, { GraphNodeItemOption } from './GraphSeries';
 import type LegendModel from '../../component/legend/LegendModel';
 
 export default function (ecModel: GlobalModel) {
-    var legendModels = ecModel.findComponents({
+    let legendModels = ecModel.findComponents({
         mainType: 'legend'
     }) as LegendModel[];
     if (!legendModels || !legendModels.length) {
         return;
     }
     ecModel.eachSeriesByType('graph', function (graphSeries: GraphSeriesModel) {
-        var categoriesData = graphSeries.getCategoriesData();
-        var graph = graphSeries.getGraph();
-        var data = graph.data;
+        let categoriesData = graphSeries.getCategoriesData();
+        let graph = graphSeries.getGraph();
+        let data = graph.data;
 
-        var categoryNames = categoriesData.mapArray(categoriesData.getName);
+        let categoryNames = categoriesData.mapArray(categoriesData.getName);
 
         data.filterSelf(function (idx) {
-            var model = data.getItemModel<GraphNodeItemOption>(idx);
-            var category = model.getShallow('category');
+            let model = data.getItemModel<GraphNodeItemOption>(idx);
+            let category = model.getShallow('category');
             if (category != null) {
                 if (typeof category === 'number') {
                     category = categoryNames[category];
                 }
                 // If in any legend component the status is not selected.
-                for (var i = 0; i < legendModels.length; i++) {
+                for (let i = 0; i < legendModels.length; i++) {
                     if (!legendModels[i].isSelected(category)) {
                         return false;
                     }
diff --git a/src/chart/graph/categoryVisual.ts b/src/chart/graph/categoryVisual.ts
index 7803c6c..330e36c 100644
--- a/src/chart/graph/categoryVisual.ts
+++ b/src/chart/graph/categoryVisual.ts
@@ -23,32 +23,32 @@ import { Dictionary, ColorString } from '../../util/types';
 
 export default function (ecModel: GlobalModel) {
 
-    var paletteScope: Dictionary<ColorString> = {};
+    let paletteScope: Dictionary<ColorString> = {};
     ecModel.eachSeriesByType('graph', function (seriesModel: GraphSeriesModel) {
-        var categoriesData = seriesModel.getCategoriesData();
-        var data = seriesModel.getData();
+        let categoriesData = seriesModel.getCategoriesData();
+        let data = seriesModel.getData();
 
-        var categoryNameIdxMap: Dictionary<number> = {};
+        let categoryNameIdxMap: Dictionary<number> = {};
 
         categoriesData.each(function (idx) {
-            var name = categoriesData.getName(idx);
+            let name = categoriesData.getName(idx);
             // Add prefix to avoid conflict with Object.prototype.
             categoryNameIdxMap['ec-' + name] = idx;
-            var itemModel = categoriesData.getItemModel<GraphNodeItemOption>(idx);
+            let itemModel = categoriesData.getItemModel<GraphNodeItemOption>(idx);
 
-            var color = itemModel.get(['itemStyle', 'color'])
+            let color = itemModel.get(['itemStyle', 'color'])
                 || seriesModel.getColorFromPalette(name, paletteScope);
             categoriesData.setItemVisual(idx, 'color', color);
 
-            var opacity = itemModel.get(['itemStyle', 'opacity']);
+            let opacity = itemModel.get(['itemStyle', 'opacity']);
             if (opacity != null) {
                 categoriesData.setItemVisual(idx, 'opacity', opacity);
             }
 
-            var symbolVisualList = ['symbol', 'symbolSize', 'symbolKeepAspect'] as const;
+            let symbolVisualList = ['symbol', 'symbolSize', 'symbolKeepAspect'] as const;
 
-            for (var i = 0; i < symbolVisualList.length; i++) {
-                var symbolVisual = itemModel.getShallow(symbolVisualList[i], true);
+            for (let i = 0; i < symbolVisualList.length; i++) {
+                let symbolVisual = itemModel.getShallow(symbolVisualList[i], true);
                 if (symbolVisual != null) {
                     categoriesData.setItemVisual(idx, symbolVisualList[i], symbolVisual);
                 }
@@ -58,16 +58,16 @@ export default function (ecModel: GlobalModel) {
         // Assign category color to visual
         if (categoriesData.count()) {
             data.each(function (idx) {
-                var model = data.getItemModel<GraphNodeItemOption>(idx);
-                var category = model.getShallow('category');
+                let model = data.getItemModel<GraphNodeItemOption>(idx);
+                let category = model.getShallow('category');
                 if (category != null) {
                     if (typeof category === 'string') {
                         category = categoryNameIdxMap['ec-' + category];
                     }
 
-                    var visualList = ['color', 'opacity', 'symbol', 'symbolSize', 'symbolKeepAspect'] as const;
+                    let visualList = ['color', 'opacity', 'symbol', 'symbolSize', 'symbolKeepAspect'] as const;
 
-                    for (var i = 0; i < visualList.length; i++) {
+                    for (let i = 0; i < visualList.length; i++) {
                         if (data.getItemVisual(idx, visualList[i], true) == null) {
                             data.setItemVisual(
                                 idx, visualList[i],
diff --git a/src/chart/graph/circularLayoutHelper.ts b/src/chart/graph/circularLayoutHelper.ts
index f0359fd..8dc4b1c 100644
--- a/src/chart/graph/circularLayoutHelper.ts
+++ b/src/chart/graph/circularLayoutHelper.ts
@@ -24,9 +24,9 @@ import GraphSeriesModel, { GraphEdgeItemOption } from './GraphSeries';
 import Graph from '../../data/Graph';
 import List from '../../data/List';
 
-var PI = Math.PI;
+const PI = Math.PI;
 
-var _symbolRadiansHalf: number[] = [];
+const _symbolRadiansHalf: number[] = [];
 
 /**
  * `basedOn` can be:
@@ -51,20 +51,20 @@ export function circularLayout(
     seriesModel: GraphSeriesModel,
     basedOn: 'value' | 'symbolSize'
 ) {
-    var coordSys = seriesModel.coordinateSystem;
+    let coordSys = seriesModel.coordinateSystem;
     if (coordSys && coordSys.type !== 'view') {
         return;
     }
 
-    var rect = coordSys.getBoundingRect();
+    let rect = coordSys.getBoundingRect();
 
-    var nodeData = seriesModel.getData();
-    var graph = nodeData.graph;
+    let nodeData = seriesModel.getData();
+    let graph = nodeData.graph;
 
-    var cx = rect.width / 2 + rect.x;
-    var cy = rect.height / 2 + rect.y;
-    var r = Math.min(rect.width, rect.height) / 2;
-    var count = nodeData.count();
+    let cx = rect.width / 2 + rect.x;
+    let cy = rect.height / 2 + rect.y;
+    let r = Math.min(rect.width, rect.height) / 2;
+    let count = nodeData.count();
 
     nodeData.setLayout({
         cx: cx,
@@ -78,12 +78,12 @@ export function circularLayout(
     _layoutNodesBasedOn[basedOn](seriesModel, graph, nodeData, r, cx, cy, count);
 
     graph.eachEdge(function (edge) {
-        var curveness = edge.getModel<GraphEdgeItemOption>().get(['lineStyle', 'curveness']) || 0;
-        var p1 = vec2.clone(edge.node1.getLayout());
-        var p2 = vec2.clone(edge.node2.getLayout());
-        var cp1;
-        var x12 = (p1[0] + p2[0]) / 2;
-        var y12 = (p1[1] + p2[1]) / 2;
+        let curveness = edge.getModel<GraphEdgeItemOption>().get(['lineStyle', 'curveness']) || 0;
+        let p1 = vec2.clone(edge.node1.getLayout());
+        let p2 = vec2.clone(edge.node2.getLayout());
+        let cp1;
+        let x12 = (p1[0] + p2[0]) / 2;
+        let y12 = (p1[1] + p2[1]) / 2;
         if (+curveness) {
             curveness *= 3;
             cp1 = [
@@ -107,16 +107,16 @@ interface LayoutNode {
     ): void
 }
 
-var _layoutNodesBasedOn: Record<'value' | 'symbolSize', LayoutNode> = {
+const _layoutNodesBasedOn: Record<'value' | 'symbolSize', LayoutNode> = {
 
     value(seriesModel, graph, nodeData, r, cx, cy, count) {
-        var angle = 0;
-        var sum = nodeData.getSum('value');
-        var unitAngle = Math.PI * 2 / (sum || count);
+        let angle = 0;
+        let sum = nodeData.getSum('value');
+        let unitAngle = Math.PI * 2 / (sum || count);
 
         graph.eachNode(function (node) {
-            var value = node.getValue('value') as number;
-            var radianHalf = unitAngle * (sum ? value : 1) / 2;
+            let value = node.getValue('value') as number;
+            let radianHalf = unitAngle * (sum ? value : 1) / 2;
 
             angle += radianHalf;
             node.setLayout([
@@ -128,13 +128,13 @@ var _layoutNodesBasedOn: Record<'value' | 'symbolSize', LayoutNode> = {
     },
 
     symbolSize(seriesModel, graph, nodeData, r, cx, cy, count) {
-        var sumRadian = 0;
+        let sumRadian = 0;
         _symbolRadiansHalf.length = count;
 
-        var nodeScale = getNodeGlobalScale(seriesModel);
+        let nodeScale = getNodeGlobalScale(seriesModel);
 
         graph.eachNode(function (node) {
-            var symbolSize = getSymbolSize(node);
+            let symbolSize = getSymbolSize(node);
 
             // Normally this case will not happen, but we still add
             // some the defensive code (2px is an arbitrary value).
@@ -143,18 +143,18 @@ var _layoutNodesBasedOn: Record<'value' | 'symbolSize', LayoutNode> = {
 
             symbolSize *= nodeScale;
 
-            var symbolRadianHalf = Math.asin(symbolSize / 2 / r);
+            let symbolRadianHalf = Math.asin(symbolSize / 2 / r);
             // when `symbolSize / 2` is bigger than `r`.
             isNaN(symbolRadianHalf) && (symbolRadianHalf = PI / 2);
             _symbolRadiansHalf[node.dataIndex] = symbolRadianHalf;
             sumRadian += symbolRadianHalf * 2;
         });
 
-        var halfRemainRadian = (2 * PI - sumRadian) / count / 2;
+        let halfRemainRadian = (2 * PI - sumRadian) / count / 2;
 
-        var angle = 0;
+        let angle = 0;
         graph.eachNode(function (node) {
-            var radianHalf = halfRemainRadian + _symbolRadiansHalf[node.dataIndex];
+            let radianHalf = halfRemainRadian + _symbolRadiansHalf[node.dataIndex];
 
             angle += radianHalf;
             node.setLayout([
diff --git a/src/chart/graph/createView.ts b/src/chart/graph/createView.ts
index bca60e2..51a942e 100644
--- a/src/chart/graph/createView.ts
+++ b/src/chart/graph/createView.ts
@@ -27,7 +27,7 @@ import GlobalModel from '../../model/Global';
 import { extend } from 'zrender/src/core/util';
 
 function getViewRect(seriesModel: GraphSeriesModel, api: ExtensionAPI, aspect: number) {
-    var option = extend(seriesModel.getBoxLayoutParams(), {
+    let option = extend(seriesModel.getBoxLayoutParams(), {
         aspect: aspect
     });
     return getLayoutRect(option, {
@@ -37,19 +37,19 @@ function getViewRect(seriesModel: GraphSeriesModel, api: ExtensionAPI, aspect: n
 }
 
 export default function (ecModel: GlobalModel, api: ExtensionAPI) {
-    var viewList: View[] = [];
+    let viewList: View[] = [];
     ecModel.eachSeriesByType('graph', function (seriesModel: GraphSeriesModel) {
-        var coordSysType = seriesModel.get('coordinateSystem');
+        let coordSysType = seriesModel.get('coordinateSystem');
         if (!coordSysType || coordSysType === 'view') {
 
-            var data = seriesModel.getData();
-            var positions = data.mapArray(function (idx) {
-                var itemModel = data.getItemModel<GraphNodeItemOption>(idx);
+            let data = seriesModel.getData();
+            let positions = data.mapArray(function (idx) {
+                let itemModel = data.getItemModel<GraphNodeItemOption>(idx);
                 return [+itemModel.get('x'), +itemModel.get('y')];
             });
 
-            var min: number[] = [];
-            var max: number[] = [];
+            let min: number[] = [];
+            let max: number[] = [];
 
             bbox.fromPoints(positions, min, max);
 
@@ -62,22 +62,22 @@ export default function (ecModel: GlobalModel, api: ExtensionAPI) {
                 max[1] += 1;
                 min[1] -= 1;
             }
-            var aspect = (max[0] - min[0]) / (max[1] - min[1]);
+            let aspect = (max[0] - min[0]) / (max[1] - min[1]);
             // FIXME If get view rect after data processed?
-            var viewRect = getViewRect(seriesModel, api, aspect);
+            let viewRect = getViewRect(seriesModel, api, aspect);
             // Position may be NaN, use view rect instead
             if (isNaN(aspect)) {
                 min = [viewRect.x, viewRect.y];
                 max = [viewRect.x + viewRect.width, viewRect.y + viewRect.height];
             }
 
-            var bbWidth = max[0] - min[0];
-            var bbHeight = max[1] - min[1];
+            let bbWidth = max[0] - min[0];
+            let bbHeight = max[1] - min[1];
 
-            var viewWidth = viewRect.width;
-            var viewHeight = viewRect.height;
+            let viewWidth = viewRect.width;
+            let viewHeight = viewRect.height;
 
-            var viewCoordSys = seriesModel.coordinateSystem = new View();
+            let viewCoordSys = seriesModel.coordinateSystem = new View();
             viewCoordSys.zoomLimit = seriesModel.get('scaleLimit');
 
             viewCoordSys.setBoundingRect(
diff --git a/src/chart/graph/edgeVisual.ts b/src/chart/graph/edgeVisual.ts
index ffa0eb6..8b78149 100644
--- a/src/chart/graph/edgeVisual.ts
+++ b/src/chart/graph/edgeVisual.ts
@@ -29,13 +29,13 @@ function normalize(a: string | number | (string | number)[]): (string | number)[
 
 export default function (ecModel: GlobalModel) {
     ecModel.eachSeriesByType('graph', function (seriesModel: GraphSeriesModel) {
-        var graph = seriesModel.getGraph();
-        var edgeData = seriesModel.getEdgeData();
-        var symbolType = normalize(seriesModel.get('edgeSymbol'));
-        var symbolSize = normalize(seriesModel.get('edgeSymbolSize'));
+        let graph = seriesModel.getGraph();
+        let edgeData = seriesModel.getEdgeData();
+        let symbolType = normalize(seriesModel.get('edgeSymbol'));
+        let symbolSize = normalize(seriesModel.get('edgeSymbolSize'));
 
-        var colorQuery = ['lineStyle', 'color'] as const;
-        var opacityQuery = ['lineStyle', 'opacity'] as const;
+        let colorQuery = ['lineStyle', 'color'] as const;
+        let opacityQuery = ['lineStyle', 'opacity'] as const;
 
         edgeData.setVisual('fromSymbol', symbolType && symbolType[0]);
         edgeData.setVisual('toSymbol', symbolType && symbolType[1]);
@@ -45,13 +45,13 @@ export default function (ecModel: GlobalModel) {
         edgeData.setVisual('opacity', seriesModel.get(opacityQuery));
 
         edgeData.each(function (idx) {
-            var itemModel = edgeData.getItemModel<GraphEdgeItemOption>(idx);
-            var edge = graph.getEdgeByIndex(idx);
-            var symbolType = normalize(itemModel.getShallow('symbol', true));
-            var symbolSize = normalize(itemModel.getShallow('symbolSize', true));
+            let itemModel = edgeData.getItemModel<GraphEdgeItemOption>(idx);
+            let edge = graph.getEdgeByIndex(idx);
+            let symbolType = normalize(itemModel.getShallow('symbol', true));
+            let symbolSize = normalize(itemModel.getShallow('symbolSize', true));
             // Edge visual must after node visual
-            var color = itemModel.get(colorQuery);
-            var opacity = itemModel.get(opacityQuery);
+            let color = itemModel.get(colorQuery);
+            let opacity = itemModel.get(opacityQuery);
             switch (color) {
                 case 'source':
                     color = edge.node1.getVisual('color');
diff --git a/src/chart/graph/forceHelper.ts b/src/chart/graph/forceHelper.ts
index 6d44415..bf5c983 100644
--- a/src/chart/graph/forceHelper.ts
+++ b/src/chart/graph/forceHelper.ts
@@ -30,7 +30,7 @@
 import * as vec2 from 'zrender/src/core/vector';
 import { RectLike } from 'zrender/src/core/BoundingRect';
 
-var scaleAndAdd = vec2.scaleAndAdd;
+const scaleAndAdd = vec2.scaleAndAdd;
 
 interface InputNode {
     p?: vec2.VectorArray
@@ -76,27 +76,27 @@ export function forceLayout<N extends InputNode, E extends InputEdge>(
     inEdges: E[],
     opts: LayoutCfg
 ) {
-    var nodes = inNodes as LayoutNode[];
-    var edges = inEdges as LayoutEdge[];
-    var rect = opts.rect;
-    var width = rect.width;
-    var height = rect.height;
-    var center = [rect.x + width / 2, rect.y + height / 2];
-    // var scale = opts.scale || 1;
-    var gravity = opts.gravity == null ? 0.1 : opts.gravity;
-
-    // for (var i = 0; i < edges.length; i++) {
-    //     var e = edges[i];
-    //     var n1 = e.n1;
-    //     var n2 = e.n2;
+    let nodes = inNodes as LayoutNode[];
+    let edges = inEdges as LayoutEdge[];
+    let rect = opts.rect;
+    let width = rect.width;
+    let height = rect.height;
+    let center = [rect.x + width / 2, rect.y + height / 2];
+    // let scale = opts.scale || 1;
+    let gravity = opts.gravity == null ? 0.1 : opts.gravity;
+
+    // for (let i = 0; i < edges.length; i++) {
+    //     let e = edges[i];
+    //     let n1 = e.n1;
+    //     let n2 = e.n2;
     //     n1.edges = n1.edges || [];
     //     n2.edges = n2.edges || [];
     //     n1.edges.push(e);
     //     n2.edges.push(e);
     // }
     // Init position
-    for (var i = 0; i < nodes.length; i++) {
-        var n = nodes[i] as LayoutNode;
+    for (let i = 0; i < nodes.length; i++) {
+        let n = nodes[i] as LayoutNode;
         if (!n.p) {
             n.p = vec2.create(
                 width * (Math.random() - 0.5) + center[0],
@@ -108,14 +108,14 @@ export function forceLayout<N extends InputNode, E extends InputEdge>(
     }
 
     // Formula in 'Graph Drawing by Force-directed Placement'
-    // var k = scale * Math.sqrt(width * height / nodes.length);
-    // var k2 = k * k;
+    // let k = scale * Math.sqrt(width * height / nodes.length);
+    // let k2 = k * k;
 
-    var initialFriction = opts.friction == null ? 0.6 : opts.friction;
-    var friction = initialFriction;
+    let initialFriction = opts.friction == null ? 0.6 : opts.friction;
+    let friction = initialFriction;
 
-    var beforeStepCallback: (nodes: N[], edges: E[]) => void;
-    var afterStepCallback: (nodes: N[], edges: E[], finished: boolean) => void;
+    let beforeStepCallback: (nodes: N[], edges: E[]) => void;
+    let afterStepCallback: (nodes: N[], edges: E[], finished: boolean) => void;
 
     return {
         warmUp: function () {
@@ -180,9 +180,9 @@ export function forceLayout<N extends InputNode, E extends InputEdge>(
                 let n = nodes[i];
                 if (!n.fixed) {
                     vec2.sub(v12, center, n.p);
-                    // var d = vec2.len(v12);
+                    // let d = vec2.len(v12);
                     // vec2.scale(v12, v12, 1 / d);
-                    // var gravityFactor = gravity;
+                    // let gravityFactor = gravity;
                     scaleAndAdd(n.p, n.p, v12, gravity * friction);
                 }
             }
diff --git a/src/chart/graph/forceLayout.ts b/src/chart/graph/forceLayout.ts
index bfd9983..e592821 100644
--- a/src/chart/graph/forceLayout.ts
+++ b/src/chart/graph/forceLayout.ts
@@ -41,15 +41,15 @@ export default function (ecModel: GlobalModel) {
             return;
         }
         if (graphSeries.get('layout') === 'force') {
-            var preservedPoints = graphSeries.preservedPoints || {};
-            var graph = graphSeries.getGraph();
-            var nodeData = graph.data;
-            var edgeData = graph.edgeData;
-            var forceModel = graphSeries.getModel('force');
-            var initLayout = forceModel.get('initLayout');
+            let preservedPoints = graphSeries.preservedPoints || {};
+            let graph = graphSeries.getGraph();
+            let nodeData = graph.data;
+            let edgeData = graph.edgeData;
+            let forceModel = graphSeries.getModel('force');
+            let initLayout = forceModel.get('initLayout');
             if (graphSeries.preservedPoints) {
                 nodeData.each(function (idx) {
-                    var id = nodeData.getId(idx);
+                    let id = nodeData.getId(idx);
                     nodeData.setItemLayout(idx, preservedPoints[id] || [NaN, NaN]);
                 });
             }
@@ -60,22 +60,22 @@ export default function (ecModel: GlobalModel) {
                 circularLayout(graphSeries, 'value');
             }
 
-            var nodeDataExtent = nodeData.getDataExtent('value');
-            var edgeDataExtent = edgeData.getDataExtent('value');
-            // var edgeDataExtent = edgeData.getDataExtent('value');
-            var repulsion = forceModel.get('repulsion');
-            var edgeLength = forceModel.get('edgeLength');
-            var repulsionArr = zrUtil.isArray(repulsion)
+            let nodeDataExtent = nodeData.getDataExtent('value');
+            let edgeDataExtent = edgeData.getDataExtent('value');
+            // let edgeDataExtent = edgeData.getDataExtent('value');
+            let repulsion = forceModel.get('repulsion');
+            let edgeLength = forceModel.get('edgeLength');
+            let repulsionArr = zrUtil.isArray(repulsion)
                 ? repulsion : [repulsion, repulsion];
-            var edgeLengthArr = zrUtil.isArray(edgeLength)
+            let edgeLengthArr = zrUtil.isArray(edgeLength)
                 ? edgeLength : [edgeLength, edgeLength];
 
             // Larger value has smaller length
             edgeLengthArr = [edgeLengthArr[1], edgeLengthArr[0]];
 
-            var nodes = nodeData.mapArray('value', function (value: number, idx) {
-                var point = nodeData.getItemLayout(idx) as number[];
-                var rep = linearMap(value, nodeDataExtent, repulsionArr);
+            let nodes = nodeData.mapArray('value', function (value: number, idx) {
+                let point = nodeData.getItemLayout(idx) as number[];
+                let rep = linearMap(value, nodeDataExtent, repulsionArr);
                 if (isNaN(rep)) {
                     rep = (repulsionArr[0] + repulsionArr[1]) / 2;
                 }
@@ -86,13 +86,13 @@ export default function (ecModel: GlobalModel) {
                     p: (!point || isNaN(point[0]) || isNaN(point[1])) ? null : point
                 };
             });
-            var edges = edgeData.mapArray('value', function (value: number, idx) {
-                var edge = graph.getEdgeByIndex(idx);
-                var d = linearMap(value, edgeDataExtent, edgeLengthArr);
+            let edges = edgeData.mapArray('value', function (value: number, idx) {
+                let edge = graph.getEdgeByIndex(idx);
+                let d = linearMap(value, edgeDataExtent, edgeLengthArr);
                 if (isNaN(d)) {
                     d = (edgeLengthArr[0] + edgeLengthArr[1]) / 2;
                 }
-                var edgeModel = edge.getModel<GraphEdgeItemOption>();
+                let edgeModel = edge.getModel<GraphEdgeItemOption>();
                 return {
                     n1: nodes[edge.node1.dataIndex],
                     n2: nodes[edge.node2.dataIndex],
@@ -102,15 +102,15 @@ export default function (ecModel: GlobalModel) {
                 };
             });
 
-            // var coordSys = graphSeries.coordinateSystem;
-            var rect = coordSys.getBoundingRect();
-            var forceInstance = forceLayout(nodes, edges, {
+            // let coordSys = graphSeries.coordinateSystem;
+            let rect = coordSys.getBoundingRect();
+            let forceInstance = forceLayout(nodes, edges, {
                 rect: rect,
                 gravity: forceModel.get('gravity'),
                 friction: forceModel.get('friction')
             });
             forceInstance.beforeStep(function (nodes, edges) {
-                for (var i = 0, l = nodes.length; i < l; i++) {
+                for (let i = 0, l = nodes.length; i < l; i++) {
                     if (nodes[i].fixed) {
                         // Write back to layout instance
                         vec2.copy(
@@ -128,11 +128,11 @@ export default function (ecModel: GlobalModel) {
                     preservedPoints[nodeData.getId(i)] = nodes[i].p;
                 }
                 for (let i = 0, l = edges.length; i < l; i++) {
-                    var e = edges[i];
-                    var edge = graph.getEdgeByIndex(i);
-                    var p1 = e.n1.p;
-                    var p2 = e.n2.p;
-                    var points = edge.getLayout() as number[][];
+                    let e = edges[i];
+                    let edge = graph.getEdgeByIndex(i);
+                    let p1 = e.n1.p;
+                    let p2 = e.n2.p;
+                    let points = edge.getLayout() as number[][];
                     points = points ? points.slice() : [];
                     points[0] = points[0] || [];
                     points[1] = points[1] || [];
diff --git a/src/chart/graph/graphAction.ts b/src/chart/graph/graphAction.ts
index 5ef560d..d05e716 100644
--- a/src/chart/graph/graphAction.ts
+++ b/src/chart/graph/graphAction.ts
@@ -24,7 +24,7 @@ import GlobalModel from '../../model/Global';
 import GraphSeriesModel from './GraphSeries';
 import View from '../../coord/View';
 
-var actionInfo = {
+const actionInfo = {
     type: 'graphRoam',
     event: 'graphRoam',
     update: 'none'
@@ -43,9 +43,9 @@ echarts.registerAction(actionInfo, function (payload: RoamPaylod, ecModel: Globa
     ecModel.eachComponent({
         mainType: 'series', query: payload
     }, function (seriesModel: GraphSeriesModel) {
-        var coordSys = seriesModel.coordinateSystem as View;
+        let coordSys = seriesModel.coordinateSystem as View;
 
-        var res = updateCenterAndZoom(coordSys, payload);
+        let res = updateCenterAndZoom(coordSys, payload);
 
         seriesModel.setCenter
             && seriesModel.setCenter(res.center);
diff --git a/src/chart/graph/graphHelper.ts b/src/chart/graph/graphHelper.ts
index 6075987..39dd954 100644
--- a/src/chart/graph/graphHelper.ts
+++ b/src/chart/graph/graphHelper.ts
@@ -22,24 +22,24 @@ import View from '../../coord/View';
 import { GraphNode } from '../../data/Graph';
 
 export function getNodeGlobalScale(seriesModel: GraphSeriesModel) {
-    var coordSys = seriesModel.coordinateSystem as View;
+    let coordSys = seriesModel.coordinateSystem as View;
     if (coordSys.type !== 'view') {
         return 1;
     }
 
-    var nodeScaleRatio = seriesModel.option.nodeScaleRatio;
+    let nodeScaleRatio = seriesModel.option.nodeScaleRatio;
 
-    var groupScale = coordSys.scale;
-    var groupZoom = (groupScale && groupScale[0]) || 1;
+    let groupScale = coordSys.scale;
+    let groupZoom = (groupScale && groupScale[0]) || 1;
     // Scale node when zoom changes
-    var roamZoom = coordSys.getZoom();
-    var nodeScale = (roamZoom - 1) * nodeScaleRatio + 1;
+    let roamZoom = coordSys.getZoom();
+    let nodeScale = (roamZoom - 1) * nodeScaleRatio + 1;
 
     return nodeScale / groupZoom;
 }
 
 export function getSymbolSize(node: GraphNode) {
-    var symbolSize = node.getVisual('symbolSize');
+    let symbolSize = node.getVisual('symbolSize');
     if (symbolSize instanceof Array) {
         symbolSize = (symbolSize[0] + symbolSize[1]) / 2;
     }
diff --git a/src/chart/graph/simpleLayout.ts b/src/chart/graph/simpleLayout.ts
index 353a734..4c83925 100644
--- a/src/chart/graph/simpleLayout.ts
+++ b/src/chart/graph/simpleLayout.ts
@@ -25,21 +25,21 @@ import GraphSeriesModel from './GraphSeries';
 
 export default function (ecModel: GlobalModel, api: ExtensionAPI) {
     ecModel.eachSeriesByType('graph', function (seriesModel: GraphSeriesModel) {
-        var layout = seriesModel.get('layout');
-        var coordSys = seriesModel.coordinateSystem;
+        let layout = seriesModel.get('layout');
+        let coordSys = seriesModel.coordinateSystem;
         if (coordSys && coordSys.type !== 'view') {
-            var data = seriesModel.getData();
+            let data = seriesModel.getData();
 
-            var dimensions: string[] = [];
+            let dimensions: string[] = [];
             each(coordSys.dimensions, function (coordDim) {
                 dimensions = dimensions.concat(data.mapDimension(coordDim, true));
             });
 
-            for (var dataIndex = 0; dataIndex < data.count(); dataIndex++) {
-                var value = [];
-                var hasValue = false;
-                for (var i = 0; i < dimensions.length; i++) {
-                    var val = data.get(dimensions[i], dataIndex) as number;
+            for (let dataIndex = 0; dataIndex < data.count(); dataIndex++) {
+                let value = [];
+                let hasValue = false;
+                for (let i = 0; i < dimensions.length; i++) {
+                    let val = data.get(dimensions[i], dataIndex) as number;
                     if (!isNaN(val)) {
                         hasValue = true;
                     }
diff --git a/src/chart/graph/simpleLayoutHelper.ts b/src/chart/graph/simpleLayoutHelper.ts
index fb699e7..d00fbb7 100644
--- a/src/chart/graph/simpleLayoutHelper.ts
+++ b/src/chart/graph/simpleLayoutHelper.ts
@@ -22,14 +22,14 @@ import GraphSeriesModel, { GraphNodeItemOption, GraphEdgeItemOption } from './Gr
 import Graph from '../../data/Graph';
 
 export function simpleLayout(seriesModel: GraphSeriesModel) {
-    var coordSys = seriesModel.coordinateSystem;
+    let coordSys = seriesModel.coordinateSystem;
     if (coordSys && coordSys.type !== 'view') {
         return;
     }
-    var graph = seriesModel.getGraph();
+    let graph = seriesModel.getGraph();
 
     graph.eachNode(function (node) {
-        var model = node.getModel<GraphNodeItemOption>();
+        let model = node.getModel<GraphNodeItemOption>();
         node.setLayout([+model.get('x'), +model.get('y')]);
     });
 
@@ -38,10 +38,10 @@ export function simpleLayout(seriesModel: GraphSeriesModel) {
 
 export function simpleLayoutEdge(graph: Graph) {
     graph.eachEdge(function (edge, idx) {
-        var curveness = edge.getModel<GraphEdgeItemOption>().get(['lineStyle', 'curveness']) || 0;
-        var p1 = vec2.clone(edge.node1.getLayout());
-        var p2 = vec2.clone(edge.node2.getLayout());
-        var points = [p1, p2];
+        let curveness = edge.getModel<GraphEdgeItemOption>().get(['lineStyle', 'curveness']) || 0;
+        let p1 = vec2.clone(edge.node1.getLayout());
+        let p2 = vec2.clone(edge.node2.getLayout());
+        let points = [p1, p2];
         if (+curveness) {
             points.push([
                 (p1[0] + p2[0]) / 2 - (p1[1] - p2[1]) * curveness,
diff --git a/src/chart/heatmap/HeatmapLayer.ts b/src/chart/heatmap/HeatmapLayer.ts
index 6cf3afb..62e842e 100644
--- a/src/chart/heatmap/HeatmapLayer.ts
+++ b/src/chart/heatmap/HeatmapLayer.ts
@@ -21,7 +21,7 @@
 
 import * as zrUtil from 'zrender/src/core/util';
 
-var GRADIENT_LEVELS = 256;
+const GRADIENT_LEVELS = 256;
 
 type ColorFunc = (grad: number, fastMode: boolean, output: number[]) => void;
 
@@ -43,7 +43,7 @@ class HeatmapLayer {
     };
 
     constructor() {
-        var canvas = zrUtil.createCanvas();
+        let canvas = zrUtil.createCanvas();
         this.canvas = canvas;
     }
 
@@ -61,21 +61,21 @@ class HeatmapLayer {
         colorFunc: Record<ColorState, ColorFunc>,
         isInRange?: (grad?: number) => boolean
     ) {
-        var brush = this._getBrush();
-        var gradientInRange = this._getGradient(colorFunc, 'inRange');
-        var gradientOutOfRange = this._getGradient(colorFunc, 'outOfRange');
-        var r = this.pointSize + this.blurSize;
-
-        var canvas = this.canvas;
-        var ctx = canvas.getContext('2d');
-        var len = data.length;
+        let brush = this._getBrush();
+        let gradientInRange = this._getGradient(colorFunc, 'inRange');
+        let gradientOutOfRange = this._getGradient(colorFunc, 'outOfRange');
+        let r = this.pointSize + this.blurSize;
+
+        let canvas = this.canvas;
+        let ctx = canvas.getContext('2d');
+        let len = data.length;
         canvas.width = width;
         canvas.height = height;
-        for (var i = 0; i < len; ++i) {
-            var p = data[i];
-            var x = p[0];
-            var y = p[1];
-            var value = p[2];
+        for (let i = 0; i < len; ++i) {
+            let p = data[i];
+            let x = p[0];
+            let y = p[1];
+            let value = p[2];
 
             // calculate alpha using value
             let alpha = normalize(value);
@@ -92,21 +92,21 @@ class HeatmapLayer {
         }
 
         // colorize the canvas using alpha value and set with gradient
-        var imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
+        let imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
 
-        var pixels = imageData.data;
-        var offset = 0;
-        var pixelLen = pixels.length;
-        var minOpacity = this.minOpacity;
-        var maxOpacity = this.maxOpacity;
-        var diffOpacity = maxOpacity - minOpacity;
+        let pixels = imageData.data;
+        let offset = 0;
+        let pixelLen = pixels.length;
+        let minOpacity = this.minOpacity;
+        let maxOpacity = this.maxOpacity;
+        let diffOpacity = maxOpacity - minOpacity;
 
         while (offset < pixelLen) {
             let alpha = pixels[offset + 3] / 256;
-            var gradientOffset = Math.floor(alpha * (GRADIENT_LEVELS - 1)) * 4;
+            let gradientOffset = Math.floor(alpha * (GRADIENT_LEVELS - 1)) * 4;
             // Simple optimize to ignore the empty data
             if (alpha > 0) {
-                var gradient = isInRange(alpha) ? gradientInRange : gradientOutOfRange;
+                let gradient = isInRange(alpha) ? gradientInRange : gradientOutOfRange;
                 // Any alpha > 0 will be mapped to [minOpacity, maxOpacity]
                 alpha > 0 && (alpha = alpha * diffOpacity + minOpacity);
                 pixels[offset++] = gradient[gradientOffset];
@@ -127,14 +127,14 @@ class HeatmapLayer {
      * get canvas of a black circle brush used for canvas to draw later
      */
     _getBrush() {
-        var brushCanvas = this._brushCanvas || (this._brushCanvas = zrUtil.createCanvas());
+        let brushCanvas = this._brushCanvas || (this._brushCanvas = zrUtil.createCanvas());
         // set brush size
-        var r = this.pointSize + this.blurSize;
-        var d = r * 2;
+        let r = this.pointSize + this.blurSize;
+        let d = r * 2;
         brushCanvas.width = d;
         brushCanvas.height = d;
 
-        var ctx = brushCanvas.getContext('2d');
+        let ctx = brushCanvas.getContext('2d');
         ctx.clearRect(0, 0, d, d);
 
         // in order to render shadow without the distinct circle,
@@ -159,11 +159,11 @@ class HeatmapLayer {
      * @private
      */
     _getGradient(colorFunc: Record<ColorState, ColorFunc>, state: ColorState) {
-        var gradientPixels = this._gradientPixels;
-        var pixelsSingleState = gradientPixels[state] || (gradientPixels[state] = new Uint8ClampedArray(256 * 4));
-        var color = [0, 0, 0, 0];
-        var off = 0;
-        for (var i = 0; i < 256; i++) {
+        let gradientPixels = this._gradientPixels;
+        let pixelsSingleState = gradientPixels[state] || (gradientPixels[state] = new Uint8ClampedArray(256 * 4));
+        let color = [0, 0, 0, 0];
+        let off = 0;
+        for (let i = 0; i < 256; i++) {
             colorFunc[state](i / 255, true, color);
             pixelsSingleState[off++] = color[0];
             pixelsSingleState[off++] = color[1];
diff --git a/src/chart/heatmap/HeatmapSeries.ts b/src/chart/heatmap/HeatmapSeries.ts
index 4126f0e..8123877 100644
--- a/src/chart/heatmap/HeatmapSeries.ts
+++ b/src/chart/heatmap/HeatmapSeries.ts
@@ -87,7 +87,7 @@ class HeatmapSeriesModel extends SeriesModel<HeatmapSeriesOption> {
     }
 
     preventIncremental() {
-        var coordSysCreator = CoordinateSystem.get(this.get('coordinateSystem'));
+        let coordSysCreator = CoordinateSystem.get(this.get('coordinateSystem'));
         if (coordSysCreator && coordSysCreator.dimensions) {
             return coordSysCreator.dimensions[0] === 'lng' && coordSysCreator.dimensions[1] === 'lat';
         }
diff --git a/src/chart/heatmap/HeatmapView.ts b/src/chart/heatmap/HeatmapView.ts
index 6937517..9d837e5 100644
--- a/src/chart/heatmap/HeatmapView.ts
+++ b/src/chart/heatmap/HeatmapView.ts
@@ -44,7 +44,7 @@ function getIsInPiecewiseRange(
     pieceList: ReturnType<PiecewiseModel['getPieceList']>,
     selected: Dictionary<boolean>
 ) {
-    var dataSpan = dataExtent[1] - dataExtent[0];
+    let dataSpan = dataExtent[1] - dataExtent[0];
     pieceList = zrUtil.map(pieceList, function (piece) {
         return {
             interval: [
@@ -53,8 +53,8 @@ function getIsInPiecewiseRange(
             ]
         };
     });
-    var len = pieceList.length;
-    var lastIndex = 0;
+    let len = pieceList.length;
+    let lastIndex = 0;
 
     return function (val: number) {
         let i;
@@ -80,7 +80,7 @@ function getIsInPiecewiseRange(
 }
 
 function getIsInContinuousRange(dataExtent: number[], range: number[]) {
-    var dataSpan = dataExtent[1] - dataExtent[0];
+    let dataSpan = dataExtent[1] - dataExtent[0];
     range = [
         (range[0] - dataExtent[0]) / dataSpan,
         (range[1] - dataExtent[0]) / dataSpan
@@ -91,7 +91,7 @@ function getIsInContinuousRange(dataExtent: number[], range: number[]) {
 }
 
 function isGeoCoordSys(coordSys: CoordinateSystem): coordSys is GeoLikeCoordSys {
-    var dimensions = coordSys.dimensions;
+    let dimensions = coordSys.dimensions;
     // Not use coorSys.type === 'geo' because coordSys maybe extended
     return dimensions[0] === 'lng' && dimensions[1] === 'lat';
 }
@@ -106,7 +106,7 @@ class HeatmapView extends ChartView {
     private _hmLayer: HeatmapLayer;
 
     render(seriesModel: HeatmapSeriesModel, ecModel: GlobalModel, api: ExtensionAPI) {
-        var visualMapOfThisSeries;
+        let visualMapOfThisSeries;
         ecModel.eachComponent('visualMap', function (visualMap: VisualMapModel) {
             visualMap.eachTargetSeries(function (targetSeries) {
                 if (targetSeries === seriesModel) {
@@ -125,7 +125,7 @@ class HeatmapView extends ChartView {
 
         this._incrementalDisplayable = null;
 
-        var coordSys = seriesModel.coordinateSystem;
+        let coordSys = seriesModel.coordinateSystem;
         if (coordSys.type === 'cartesian2d' || coordSys.type === 'calendar') {
             this._renderOnCartesianAndCalendar(seriesModel, api, 0, seriesModel.getData().count());
         }
@@ -146,7 +146,7 @@ class HeatmapView extends ChartView {
         ecModel: GlobalModel,
         api: ExtensionAPI
     ) {
-        var coordSys = seriesModel.coordinateSystem;
+        let coordSys = seriesModel.coordinateSystem;
         if (coordSys) {
             this._renderOnCartesianAndCalendar(seriesModel, api, params.start, params.end, true);
         }
@@ -160,13 +160,13 @@ class HeatmapView extends ChartView {
         incremental?: boolean
     ) {
 
-        var coordSys = seriesModel.coordinateSystem as Cartesian2D | Calendar;
-        var width;
-        var height;
+        let coordSys = seriesModel.coordinateSystem as Cartesian2D | Calendar;
+        let width;
+        let height;
 
         if (isCoordinateSystemType<Cartesian2D>(coordSys, 'cartesian2d')) {
-            var xAxis = coordSys.getAxis('x');
-            var yAxis = coordSys.getAxis('y');
+            let xAxis = coordSys.getAxis('x');
+            let yAxis = coordSys.getAxis('y');
 
             if (__DEV__) {
                 if (!(xAxis.type === 'category' && yAxis.type === 'category')) {
@@ -181,15 +181,15 @@ class HeatmapView extends ChartView {
             height = yAxis.getBandWidth();
         }
 
-        var group = this.group;
-        var data = seriesModel.getData();
+        let group = this.group;
+        let data = seriesModel.getData();
 
-        var style = seriesModel.getModel('itemStyle').getItemStyle(['color']);
-        var hoverStl = seriesModel.getModel(['emphasis', 'itemStyle']).getItemStyle();
-        var labelModel = seriesModel.getModel('label');
-        var hoverLabelModel = seriesModel.getModel(['emphasis', 'label']);
+        let style = seriesModel.getModel('itemStyle').getItemStyle(['color']);
+        let hoverStl = seriesModel.getModel(['emphasis', 'itemStyle']).getItemStyle();
+        let labelModel = seriesModel.getModel('label');
+        let hoverLabelModel = seriesModel.getModel(['emphasis', 'label']);
 
-        var dataDims = isCoordinateSystemType<Cartesian2D>(coordSys, 'cartesian2d')
+        let dataDims = isCoordinateSystemType<Cartesian2D>(coordSys, 'cartesian2d')
             ? [
                 data.mapDimension('x'),
                 data.mapDimension('y'),
@@ -200,8 +200,8 @@ class HeatmapView extends ChartView {
                 data.mapDimension('value')
             ];
 
-        for (var idx = start; idx < end; idx++) {
-            var rect;
+        for (let idx = start; idx < end; idx++) {
+            let rect;
 
             if (isCoordinateSystemType<Cartesian2D>(coordSys, 'cartesian2d')) {
                 // Ignore empty data
@@ -209,7 +209,7 @@ class HeatmapView extends ChartView {
                     continue;
                 }
 
-                var point = coordSys.dataToPoint([
+                let point = coordSys.dataToPoint([
                     data.get(dataDims[0], idx),
                     data.get(dataDims[1], idx)
                 ]);
@@ -243,7 +243,7 @@ class HeatmapView extends ChartView {
                 });
             }
 
-            var itemModel = data.getItemModel<HeatmapDataItemOption>(idx);
+            let itemModel = data.getItemModel<HeatmapDataItemOption>(idx);
 
             // Optimization for large datset
             if (data.hasItemOption) {
@@ -253,8 +253,8 @@ class HeatmapView extends ChartView {
                 hoverLabelModel = itemModel.getModel(['emphasis', 'label']);
             }
 
-            var rawValue = seriesModel.getRawValue(idx) as OptionDataValue[];
-            var defaultText = '-';
+            let rawValue = seriesModel.getRawValue(idx) as OptionDataValue[];
+            let defaultText = '-';
             if (rawValue && rawValue[2] != null) {
                 defaultText = rawValue[2] + '';
             }
@@ -290,47 +290,47 @@ class HeatmapView extends ChartView {
         visualMapModel: VisualMapModel,
         api: ExtensionAPI
     ) {
-        var inRangeVisuals = visualMapModel.targetVisuals.inRange;
-        var outOfRangeVisuals = visualMapModel.targetVisuals.outOfRange;
+        let inRangeVisuals = visualMapModel.targetVisuals.inRange;
+        let outOfRangeVisuals = visualMapModel.targetVisuals.outOfRange;
         // if (!visualMapping) {
         //     throw new Error('Data range must have color visuals');
         // }
 
-        var data = seriesModel.getData();
-        var hmLayer = this._hmLayer || (this._hmLayer || new HeatmapLayer());
+        let data = seriesModel.getData();
+        let hmLayer = this._hmLayer || (this._hmLayer || new HeatmapLayer());
         hmLayer.blurSize = seriesModel.get('blurSize');
         hmLayer.pointSize = seriesModel.get('pointSize');
         hmLayer.minOpacity = seriesModel.get('minOpacity');
         hmLayer.maxOpacity = seriesModel.get('maxOpacity');
 
-        var rect = geo.getViewRect().clone();
-        var roamTransform = geo.getRoamTransform();
+        let rect = geo.getViewRect().clone();
+        let roamTransform = geo.getRoamTransform();
         rect.applyTransform(roamTransform);
 
         // Clamp on viewport
-        var x = Math.max(rect.x, 0);
-        var y = Math.max(rect.y, 0);
-        var x2 = Math.min(rect.width + rect.x, api.getWidth());
-        var y2 = Math.min(rect.height + rect.y, api.getHeight());
-        var width = x2 - x;
-        var height = y2 - y;
-
-        var dims = [
+        let x = Math.max(rect.x, 0);
+        let y = Math.max(rect.y, 0);
+        let x2 = Math.min(rect.width + rect.x, api.getWidth());
+        let y2 = Math.min(rect.height + rect.y, api.getHeight());
+        let width = x2 - x;
+        let height = y2 - y;
+
+        let dims = [
             data.mapDimension('lng'),
             data.mapDimension('lat'),
             data.mapDimension('value')
         ];
 
-        var points = data.mapArray(dims, function (lng: number, lat: number, value: number) {
-            var pt = geo.dataToPoint([lng, lat]);
+        let points = data.mapArray(dims, function (lng: number, lat: number, value: number) {
+            let pt = geo.dataToPoint([lng, lat]);
             pt[0] -= x;
             pt[1] -= y;
             pt.push(value);
             return pt;
         });
 
-        var dataExtent = visualMapModel.getExtent();
-        var isInRange = visualMapModel.type === 'visualMap.continuous'
+        let dataExtent = visualMapModel.getExtent();
+        let isInRange = visualMapModel.type === 'visualMap.continuous'
             ? getIsInContinuousRange(dataExtent, (visualMapModel as ContinuousModel).option.range)
             : getIsInPiecewiseRange(
                 dataExtent,
@@ -347,7 +347,7 @@ class HeatmapView extends ChartView {
             },
             isInRange
         );
-        var img = new graphic.Image({
+        let img = new graphic.Image({
             style: {
                 width: width,
                 height: height,
diff --git a/src/chart/helper/EffectLine.ts b/src/chart/helper/EffectLine.ts
index c344143..381d749 100644
--- a/src/chart/helper/EffectLine.ts
+++ b/src/chart/helper/EffectLine.ts
@@ -61,15 +61,15 @@ class EffectLine extends graphic.Group {
     }
 
     _updateEffectSymbol(lineData: List, idx: number) {
-        var itemModel = lineData.getItemModel<LineDrawModelOption>(idx);
-        var effectModel = itemModel.getModel('effect');
-        var size = effectModel.get('symbolSize');
-        var symbolType = effectModel.get('symbol');
+        let itemModel = lineData.getItemModel<LineDrawModelOption>(idx);
+        let effectModel = itemModel.getModel('effect');
+        let size = effectModel.get('symbolSize');
+        let symbolType = effectModel.get('symbol');
         if (!zrUtil.isArray(size)) {
             size = [size, size];
         }
-        var color = effectModel.get('color') || lineData.getItemVisual(idx, 'color');
-        var symbol = this.childAt(1) as ECSymbolOnEffectLine;
+        let color = effectModel.get('color') || lineData.getItemVisual(idx, 'color');
+        let symbol = this.childAt(1) as ECSymbolOnEffectLine;
 
         if (this._symbolType !== symbolType) {
             // Remove previous
@@ -110,19 +110,19 @@ class EffectLine extends graphic.Group {
         idx: number
     ) {
 
-        var symbol = this.childAt(1) as ECSymbolOnEffectLine;
+        let symbol = this.childAt(1) as ECSymbolOnEffectLine;
         if (!symbol) {
             return;
         }
 
-        var self = this;
+        let self = this;
 
-        var points = lineData.getItemLayout(idx);
+        let points = lineData.getItemLayout(idx);
 
-        var period = effectModel.get('period') * 1000;
-        var loop = effectModel.get('loop');
-        var constantSpeed = effectModel.get('constantSpeed');
-        var delayExpr = zrUtil.retrieve(effectModel.get('delay'), function (idx) {
+        let period = effectModel.get('period') * 1000;
+        let loop = effectModel.get('loop');
+        let constantSpeed = effectModel.get('constantSpeed');
+        let delayExpr = zrUtil.retrieve(effectModel.get('delay'), function (idx) {
             return idx / lineData.count() * period / 3;
         });
 
@@ -139,7 +139,7 @@ class EffectLine extends graphic.Group {
 
             symbol.stopAnimation();
 
-            var delayNum: number;
+            let delayNum: number;
             if (typeof delayExpr === 'function') {
                 delayNum = delayExpr(idx);
             }
@@ -150,7 +150,7 @@ class EffectLine extends graphic.Group {
                 delayNum = -period * symbol.__t;
             }
             symbol.__t = 0;
-            var animator = symbol.animate('', loop)
+            let animator = symbol.animate('', loop)
                 .when(period, {
                     __t: 1
                 })
@@ -191,20 +191,20 @@ class EffectLine extends graphic.Group {
     }
 
     updateSymbolPosition(symbol: ECSymbolOnEffectLine) {
-        var p1 = symbol.__p1;
-        var p2 = symbol.__p2;
-        var cp1 = symbol.__cp1;
-        var t = symbol.__t;
-        var pos = symbol.position;
-        var lastPos = [pos[0], pos[1]];
-        var quadraticAt = curveUtil.quadraticAt;
-        var quadraticDerivativeAt = curveUtil.quadraticDerivativeAt;
+        let p1 = symbol.__p1;
+        let p2 = symbol.__p2;
+        let cp1 = symbol.__cp1;
+        let t = symbol.__t;
+        let pos = symbol.position;
+        let lastPos = [pos[0], pos[1]];
+        let quadraticAt = curveUtil.quadraticAt;
+        let quadraticDerivativeAt = curveUtil.quadraticDerivativeAt;
         pos[0] = quadraticAt(p1[0], cp1[0], p2[0], t);
         pos[1] = quadraticAt(p1[1], cp1[1], p2[1], t);
 
         // Tangent
-        var tx = quadraticDerivativeAt(p1[0], cp1[0], p2[0], t);
-        var ty = quadraticDerivativeAt(p1[1], cp1[1], p2[1], t);
+        let tx = quadraticDerivativeAt(p1[0], cp1[0], p2[0], t);
+        let ty = quadraticDerivativeAt(p1[1], cp1[1], p2[1], t);
 
         symbol.rotation = -Math.atan2(ty, tx) - Math.PI / 2;
         // enable continuity trail for 'line', 'rect', 'roundRect' symbolType
@@ -235,7 +235,7 @@ class EffectLine extends graphic.Group {
     updateLayout(lineData: List, idx: number) {
         (this.childAt(0) as Line).updateLayout(lineData, idx);
 
-        var effectModel = lineData.getItemModel<LineDrawModelOption>(idx).getModel('effect');
+        let effectModel = lineData.getItemModel<LineDrawModelOption>(idx).getModel('effect');
         this._updateEffectAnimation(lineData, effectModel, idx);
     }
 }
diff --git a/src/chart/helper/EffectPolyline.ts b/src/chart/helper/EffectPolyline.ts
index 2a5c70f..c31dae4 100644
--- a/src/chart/helper/EffectPolyline.ts
+++ b/src/chart/helper/EffectPolyline.ts
@@ -40,11 +40,11 @@ class EffectPolyline extends EffectLine {
     // Override
     protected updateAnimationPoints(symbol: ECSymbolOnEffectLine, points: number[][]) {
         this._points = points;
-        var accLenArr = [0];
-        var len = 0;
+        let accLenArr = [0];
+        let len = 0;
         for (let i = 1; i < points.length; i++) {
-            var p1 = points[i - 1];
-            var p2 = points[i];
+            let p1 = points[i - 1];
+            let p2 = points[i];
             len += vec2.dist(p1, p2);
             accLenArr.push(len);
         }
@@ -66,23 +66,23 @@ class EffectPolyline extends EffectLine {
 
     // Override
     updateSymbolPosition(symbol: ECSymbolOnEffectLine) {
-        var t = symbol.__t;
-        var points = this._points;
-        var offsets = this._offsets;
-        var len = points.length;
+        let t = symbol.__t;
+        let points = this._points;
+        let offsets = this._offsets;
+        let len = points.length;
 
         if (!offsets) {
             // Has length 0
             return;
         }
 
-        var lastFrame = this._lastFrame;
-        var frame: number;
+        let lastFrame = this._lastFrame;
+        let frame: number;
 
         if (t < this._lastFramePercent) {
             // Start from the next frame
             // PENDING start from lastFrame ?
-            var start = Math.min(lastFrame + 1, len - 1);
+            let start = Math.min(lastFrame + 1, len - 1);
             for (frame = start; frame >= 0; frame--) {
                 if (offsets[frame] <= t) {
                     break;
@@ -105,8 +105,8 @@ class EffectPolyline extends EffectLine {
             (t - offsets[frame]) / (offsets[frame + 1] - offsets[frame])
         );
 
-        var tx = points[frame + 1][0] - points[frame][0];
-        var ty = points[frame + 1][1] - points[frame][1];
+        let tx = points[frame + 1][0] - points[frame][0];
+        let ty = points[frame + 1][1] - points[frame][1];
         symbol.rotation = -Math.atan2(ty, tx) - Math.PI / 2;
 
         this._lastFrame = frame;
diff --git a/src/chart/helper/EffectSymbol.ts b/src/chart/helper/EffectSymbol.ts
index 2b13414..3edab7c 100644
--- a/src/chart/helper/EffectSymbol.ts
+++ b/src/chart/helper/EffectSymbol.ts
@@ -27,7 +27,7 @@ import type { ZRColor } from '../../util/types';
 import type Displayable from 'zrender/src/graphic/Displayable';
 import { SymbolDrawItemModelOption } from './SymbolDraw';
 
-var EFFECT_RIPPLE_NUMBER = 3;
+const EFFECT_RIPPLE_NUMBER = 3;
 
 interface RippleEffectCfg {
     showEffectOn?: 'emphasis' | 'render'
@@ -50,7 +50,7 @@ function normalizeSymbolSize(symbolSize: number | number[]): number[] {
 }
 
 function updateRipplePath(rippleGroup: Group, effectCfg: RippleEffectCfg) {
-    var color = effectCfg.rippleEffectColor || effectCfg.color;
+    let color = effectCfg.rippleEffectColor || effectCfg.color;
     rippleGroup.eachChild(function (ripplePath: Displayable) {
         ripplePath.attr({
             z: effectCfg.z,
@@ -70,8 +70,8 @@ class EffectSymbol extends Group {
     constructor(data: List, idx: number) {
         super();
 
-        var symbol = new SymbolClz(data, idx);
-        var rippleGroup = new Group();
+        let symbol = new SymbolClz(data, idx);
+        let rippleGroup = new Group();
         this.add(symbol);
         this.add(rippleGroup);
 
@@ -84,15 +84,15 @@ class EffectSymbol extends Group {
     }
 
     startEffectAnimation(effectCfg: RippleEffectCfg) {
-        var symbolType = effectCfg.symbolType;
-        var color = effectCfg.color;
-        var rippleGroup = this.childAt(1) as Group;
+        let symbolType = effectCfg.symbolType;
+        let color = effectCfg.color;
+        let rippleGroup = this.childAt(1) as Group;
 
-        for (var i = 0; i < EFFECT_RIPPLE_NUMBER; i++) {
+        for (let i = 0; i < EFFECT_RIPPLE_NUMBER; i++) {
             // If width/height are set too small (e.g., set to 1) on ios10
             // and macOS Sierra, a circle stroke become a rect, no matter what
             // the scale is set. So we set width/height as 2. See #4136.
-            var ripplePath = createSymbol(
+            let ripplePath = createSymbol(
                 symbolType, -1, -1, 2, 2, color
             );
             ripplePath.attr({
@@ -104,7 +104,7 @@ class EffectSymbol extends Group {
                 scale: [0.5, 0.5]
             });
 
-            var delay = -i / EFFECT_RIPPLE_NUMBER * effectCfg.period + effectCfg.effectOffset;
+            let delay = -i / EFFECT_RIPPLE_NUMBER * effectCfg.period + effectCfg.effectOffset;
             // TODO Configurable effectCfg.period
             ripplePath.animate('', true)
                 .when(effectCfg.period, {
@@ -129,13 +129,13 @@ class EffectSymbol extends Group {
      * Update effect symbol
      */
     updateEffectAnimation(effectCfg: RippleEffectCfg) {
-        var oldEffectCfg = this._effectCfg;
-        var rippleGroup = this.childAt(1) as Group;
+        let oldEffectCfg = this._effectCfg;
+        let rippleGroup = this.childAt(1) as Group;
 
         // Must reinitialize effect if following configuration changed
-        var DIFFICULT_PROPS = ['symbolType', 'period', 'rippleScale'] as const;
-        for (var i = 0; i < DIFFICULT_PROPS.length; i++) {
-            var propName = DIFFICULT_PROPS[i];
+        let DIFFICULT_PROPS = ['symbolType', 'period', 'rippleScale'] as const;
+        for (let i = 0; i < DIFFICULT_PROPS.length; i++) {
+            let propName = DIFFICULT_PROPS[i];
             if (oldEffectCfg[propName] !== effectCfg[propName]) {
                 this.stopEffectAnimation();
                 this.startEffectAnimation(effectCfg);
@@ -164,15 +164,15 @@ class EffectSymbol extends Group {
      * Update symbol properties
      */
     updateData(data: List, idx: number) {
-        var seriesModel = data.hostModel;
+        let seriesModel = data.hostModel;
 
         (this.childAt(0) as SymbolClz).updateData(data, idx);
 
-        var rippleGroup = this.childAt(1);
-        var itemModel = data.getItemModel<SymbolDrawItemModelOption>(idx);
-        var symbolType = data.getItemVisual(idx, 'symbol');
-        var symbolSize = normalizeSymbolSize(data.getItemVisual(idx, 'symbolSize'));
-        var color = data.getItemVisual(idx, 'color');
+        let rippleGroup = this.childAt(1);
+        let itemModel = data.getItemModel<SymbolDrawItemModelOption>(idx);
+        let symbolType = data.getItemVisual(idx, 'symbol');
+        let symbolSize = normalizeSymbolSize(data.getItemVisual(idx, 'symbolSize'));
+        let color = data.getItemVisual(idx, 'color');
 
         rippleGroup.attr('scale', symbolSize);
 
@@ -180,15 +180,15 @@ class EffectSymbol extends Group {
             ripplePath.setStyle('fill', color);
         });
 
-        var symbolOffset = itemModel.getShallow('symbolOffset');
+        let symbolOffset = itemModel.getShallow('symbolOffset');
         if (symbolOffset) {
-            var pos = rippleGroup.position;
+            let pos = rippleGroup.position;
             pos[0] = parsePercent(symbolOffset[0], symbolSize[0]);
             pos[1] = parsePercent(symbolOffset[1], symbolSize[1]);
         }
         rippleGroup.rotation = (itemModel.getShallow('symbolRotate') || 0) * Math.PI / 180 || 0;
 
-        var effectCfg: RippleEffectCfg = {};
+        let effectCfg: RippleEffectCfg = {};
 
         effectCfg.showEffectOn = seriesModel.get('showEffectOn');
         effectCfg.rippleScale = itemModel.get(['rippleEffect', 'scale']);
@@ -215,14 +215,14 @@ class EffectSymbol extends Group {
             this._effectCfg = null;
 
             this.stopEffectAnimation();
-            var symbol = this.childAt(0) as SymbolClz;
-            var onEmphasis = function (this: EffectSymbol) {
+            let symbol = this.childAt(0) as SymbolClz;
+            let onEmphasis = function (this: EffectSymbol) {
                 symbol.highlight();
                 if (effectCfg.showEffectOn !== 'render') {
                     this.startEffectAnimation(effectCfg);
                 }
             };
-            var onNormal = function (this: EffectSymbol) {
+            let onNormal = function (this: EffectSymbol) {
                 symbol.downplay();
                 if (effectCfg.showEffectOn !== 'render') {
                     this.stopEffectAnimation();
diff --git a/src/chart/helper/LargeLineDraw.ts b/src/chart/helper/LargeLineDraw.ts
index f581fe4..c411664 100644
--- a/src/chart/helper/LargeLineDraw.ts
+++ b/src/chart/helper/LargeLineDraw.ts
@@ -65,15 +65,15 @@ class LargeLinesPath extends graphic.Path {
     }
 
     buildPath(ctx: CanvasRenderingContext2D, shape: LargeLinesPathShape) {
-        var segs = shape.segs;
-        var curveness = shape.curveness;
+        let segs = shape.segs;
+        let curveness = shape.curveness;
 
         if (shape.polyline) {
             for (let i = 0; i < segs.length;) {
-                var count = segs[i++];
+                let count = segs[i++];
                 if (count > 0) {
                     ctx.moveTo(segs[i++], segs[i++]);
-                    for (var k = 1; k < count; k++) {
+                    for (let k = 1; k < count; k++) {
                         ctx.lineTo(segs[i++], segs[i++]);
                     }
                 }
@@ -81,14 +81,14 @@ class LargeLinesPath extends graphic.Path {
         }
         else {
             for (let i = 0; i < segs.length;) {
-                var x0 = segs[i++];
-                var y0 = segs[i++];
-                var x1 = segs[i++];
-                var y1 = segs[i++];
+                let x0 = segs[i++];
+                let y0 = segs[i++];
+                let x1 = segs[i++];
+                let y1 = segs[i++];
                 ctx.moveTo(x0, y0);
                 if (curveness > 0) {
-                    var x2 = (x0 + x1) / 2 - (y0 - y1) * curveness;
-                    var y2 = (y0 + y1) / 2 - (x1 - x0) * curveness;
+                    let x2 = (x0 + x1) / 2 - (y0 - y1) * curveness;
+                    let y2 = (y0 + y1) / 2 - (x1 - x0) * curveness;
                     ctx.quadraticCurveTo(x2, y2, x1, y1);
                 }
                 else {
@@ -100,15 +100,15 @@ class LargeLinesPath extends graphic.Path {
 
     findDataIndex(x: number, y: number) {
 
-        var shape = this.shape;
-        var segs = shape.segs;
-        var curveness = shape.curveness;
-        var lineWidth = this.style.lineWidth;
+        let shape = this.shape;
+        let segs = shape.segs;
+        let curveness = shape.curveness;
+        let lineWidth = this.style.lineWidth;
 
         if (shape.polyline) {
             let dataIndex = 0;
             for (let i = 0; i < segs.length;) {
-                var count = segs[i++];
+                let count = segs[i++];
                 if (count > 0) {
                     let x0 = segs[i++];
                     let y0 = segs[i++];
@@ -172,7 +172,7 @@ class LargeLineDraw {
     updateData(data: LargeLinesData) {
         this.group.removeAll();
 
-        var lineEl = new LargeLinesPath({
+        let lineEl = new LargeLinesPath({
             rectHover: true,
             cursor: 'default'
         });
@@ -213,7 +213,7 @@ class LargeLineDraw {
      * @override
      */
     incrementalUpdate(taskParams: StageHandlerProgressParams, data: LargeLinesData) {
-        var lineEl = new LargeLinesPath();
+        let lineEl = new LargeLinesPath();
         lineEl.setShape({
             segs: data.getLayout('linesPoints')
         });
@@ -241,7 +241,7 @@ class LargeLineDraw {
     };
 
     _setCommon(lineEl: LargeLinesPath, data: LargeLinesData, isIncremental?: boolean) {
-        var hostModel = data.hostModel;
+        let hostModel = data.hostModel;
 
         lineEl.setShape({
             polyline: hostModel.get('polyline'),
@@ -253,7 +253,7 @@ class LargeLineDraw {
         );
         lineEl.style.strokeNoScale = true;
 
-        var visualColor = data.getVisual('color');
+        let visualColor = data.getVisual('color');
         if (visualColor) {
             lineEl.setStyle('stroke', visualColor);
         }
@@ -266,7 +266,7 @@ class LargeLineDraw {
             ecData.seriesIndex = hostModel.seriesIndex;
             lineEl.on('mousemove', function (e) {
                 ecData.dataIndex = null;
-                var dataIndex = lineEl.findDataIndex(e.offsetX, e.offsetY);
+                let dataIndex = lineEl.findDataIndex(e.offsetX, e.offsetY);
                 if (dataIndex > 0) {
                     // Provide dataIndex for tooltip
                     ecData.dataIndex = dataIndex + lineEl.__startIndex;
@@ -276,7 +276,7 @@ class LargeLineDraw {
     };
 
     _clearIncremental() {
-        var incremental = this._incremental;
+        let incremental = this._incremental;
         if (incremental) {
             incremental.clearDisplaybles();
         }
diff --git a/src/chart/helper/LargeSymbolDraw.ts b/src/chart/helper/LargeSymbolDraw.ts
index 94a4eeb..19b49d4 100644
--- a/src/chart/helper/LargeSymbolDraw.ts
+++ b/src/chart/helper/LargeSymbolDraw.ts
@@ -31,7 +31,7 @@ import SeriesModel from '../../model/Series';
 import { StageHandlerProgressParams } from '../../util/types';
 import { CoordinateSystemClipArea } from '../../coord/CoordinateSystem';
 
-var BOOST_SIZE_THRESHOLD = 4;
+const BOOST_SIZE_THRESHOLD = 4;
 
 class LargeSymbolPathShape {
     points: ArrayLike<number>;
@@ -64,22 +64,22 @@ class LargeSymbolPath extends graphic.Path<LargeSymbolPathProps> {
     setColor: ECSymbol['setColor'];
 
     buildPath(path: PathProxy, shape: LargeSymbolPathShape) {
-        var points = shape.points;
-        var size = shape.size;
+        let points = shape.points;
+        let size = shape.size;
 
-        var symbolProxy = this.symbolProxy;
-        var symbolProxyShape = symbolProxy.shape;
-        var ctx = path.getContext ? path.getContext() : path;
-        var canBoost = ctx && size[0] < BOOST_SIZE_THRESHOLD;
+        let symbolProxy = this.symbolProxy;
+        let symbolProxyShape = symbolProxy.shape;
+        let ctx = path.getContext ? path.getContext() : path;
+        let canBoost = ctx && size[0] < BOOST_SIZE_THRESHOLD;
 
         // Do draw in afterBrush.
         if (canBoost) {
             return;
         }
 
-        for (var i = 0; i < points.length;) {
-            var x = points[i++];
-            var y = points[i++];
+        for (let i = 0; i < points.length;) {
+            let x = points[i++];
+            let y = points[i++];
 
             if (isNaN(x) || isNaN(y)) {
                 continue;
@@ -98,10 +98,10 @@ class LargeSymbolPath extends graphic.Path<LargeSymbolPathProps> {
     }
 
     afterBrush(ctx: CanvasRenderingContext2D) {
-        var shape = this.shape;
-        var points = shape.points;
-        var size = shape.size;
-        var canBoost = size[0] < BOOST_SIZE_THRESHOLD;
+        let shape = this.shape;
+        let points = shape.points;
+        let size = shape.size;
+        let canBoost = size[0] < BOOST_SIZE_THRESHOLD;
 
         if (!canBoost) {
             return;
@@ -109,9 +109,9 @@ class LargeSymbolPath extends graphic.Path<LargeSymbolPathProps> {
 
         this.setTransform(ctx);
         // PENDING If style or other canvas status changed?
-        for (var i = 0; i < points.length;) {
-            var x = points[i++];
-            var y = points[i++];
+        for (let i = 0; i < points.length;) {
+            let x = points[i++];
+            let y = points[i++];
             if (isNaN(x) || isNaN(y)) {
                 continue;
             }
@@ -133,20 +133,20 @@ class LargeSymbolPath extends graphic.Path<LargeSymbolPathProps> {
         // TODO ???
         // Consider transform
 
-        var shape = this.shape;
-        var points = shape.points;
-        var size = shape.size;
+        let shape = this.shape;
+        let points = shape.points;
+        let size = shape.size;
 
-        var w = Math.max(size[0], 4);
-        var h = Math.max(size[1], 4);
+        let w = Math.max(size[0], 4);
+        let h = Math.max(size[1], 4);
 
         // Not consider transform
         // Treat each element as a rect
         // top down traverse
-        for (var idx = points.length / 2 - 1; idx >= 0; idx--) {
-            var i = idx * 2;
-            var x0 = points[i] - w / 2;
-            var y0 = points[i + 1] - h / 2;
+        for (let idx = points.length / 2 - 1; idx >= 0; idx--) {
+            let i = idx * 2;
+            let x0 = points[i] - w / 2;
+            let y0 = points[i + 1] - h / 2;
             if (x >= x0 && y >= y0 && x <= x0 + w && y <= y0 + h) {
                 return idx;
             }
@@ -175,7 +175,7 @@ class LargeSymbolDraw {
      */
     updateData(data: List, opt?: UpdateOpt) {
         this.group.removeAll();
-        var symbolEl = new LargeSymbolPath({
+        let symbolEl = new LargeSymbolPath({
             rectHover: true,
             cursor: 'default'
         });
@@ -194,11 +194,11 @@ class LargeSymbolDraw {
             return;
         }
 
-        var points = data.getLayout('symbolPoints');
+        let points = data.getLayout('symbolPoints');
         this.group.eachChild(function (child: LargeSymbolPath) {
             if (child.startIndex != null) {
-                var len = (child.endIndex - child.startIndex) * 2;
-                var byteOffset = child.startIndex * 4 * 2;
+                let len = (child.endIndex - child.startIndex) * 2;
+                let byteOffset = child.startIndex * 4 * 2;
                 points = new Float32Array(points.buffer, byteOffset, len);
             }
             child.setShape('points', points);
@@ -225,7 +225,7 @@ class LargeSymbolDraw {
     }
 
     incrementalUpdate(taskParams: StageHandlerProgressParams, data: List, opt: UpdateOpt) {
-        var symbolEl;
+        let symbolEl;
         if (this._incremental) {
             symbolEl = new LargeSymbolPath();
             this._incremental.addDisplayable(symbolEl, true);
@@ -253,7 +253,7 @@ class LargeSymbolDraw {
         isIncremental: boolean,
         opt: UpdateOpt
     ) {
-        var hostModel = data.hostModel;
+        let hostModel = data.hostModel;
 
         opt = opt || {};
         // TODO
@@ -261,13 +261,13 @@ class LargeSymbolDraw {
         //     // TODO typed array?
         //     symbolEl.setShape('sizes', data.mapArray(
         //         function (idx) {
-        //             var size = data.getItemVisual(idx, 'symbolSize');
+        //             let size = data.getItemVisual(idx, 'symbolSize');
         //             return (size instanceof Array) ? size : [size, size];
         //         }
         //     ));
         // }
         // else {
-        var size = data.getVisual('symbolSize');
+        let size = data.getVisual('symbolSize');
         symbolEl.setShape('size', (size instanceof Array) ? size : [size, size]);
         // }
 
@@ -279,7 +279,7 @@ class LargeSymbolDraw {
         // Use symbolProxy setColor method
         symbolEl.setColor = symbolEl.symbolProxy.setColor;
 
-        var extrudeShadow = symbolEl.shape.size[0] < BOOST_SIZE_THRESHOLD;
+        let extrudeShadow = symbolEl.shape.size[0] < BOOST_SIZE_THRESHOLD;
         symbolEl.useStyle(
             // Draw shadow when doing fillRect is extremely slow.
             hostModel.getModel('itemStyle').getItemStyle(
@@ -287,7 +287,7 @@ class LargeSymbolDraw {
             )
         );
 
-        var visualColor = data.getVisual('color');
+        let visualColor = data.getVisual('color');
         if (visualColor) {
             symbolEl.setColor(visualColor);
         }
@@ -299,7 +299,7 @@ class LargeSymbolDraw {
             ecData.seriesIndex = (hostModel as SeriesModel).seriesIndex;
             symbolEl.on('mousemove', function (e) {
                 ecData.dataIndex = null;
-                var dataIndex = symbolEl.findDataIndex(e.offsetX, e.offsetY);
+                let dataIndex = symbolEl.findDataIndex(e.offsetX, e.offsetY);
                 if (dataIndex >= 0) {
                     // Provide dataIndex for tooltip
                     ecData.dataIndex = dataIndex + (symbolEl.startIndex || 0);
@@ -315,7 +315,7 @@ class LargeSymbolDraw {
     }
 
     _clearIncremental() {
-        var incremental = this._incremental;
+        let incremental = this._incremental;
         if (incremental) {
             incremental.clearDisplaybles();
         }
diff --git a/src/chart/helper/Line.ts b/src/chart/helper/Line.ts
index bce5ac0..628a67b 100644
--- a/src/chart/helper/Line.ts
+++ b/src/chart/helper/Line.ts
@@ -29,7 +29,7 @@ import { ZRTextAlign, ZRTextVerticalAlign } from '../../util/types';
 import SeriesModel from '../../model/Series';
 import type { LineDrawSeriesScope, LineDrawModelOption } from './LineDraw';
 
-var SYMBOL_CATEGORIES = ['fromSymbol', 'toSymbol'] as const;
+const SYMBOL_CATEGORIES = ['fromSymbol', 'toSymbol'] as const;
 
 type ECSymbol = ReturnType<typeof createSymbol>;
 
@@ -52,9 +52,9 @@ function makeSymbolTypeKey(symbolCategory: string) {
  * @inner
  */
 function createSymbol(name: string, lineData: List, idx: number) {
-    var color = lineData.getItemVisual(idx, 'color');
-    var symbolType = lineData.getItemVisual(idx, name);
-    var symbolSize = lineData.getItemVisual(idx, name + 'Size');
+    let color = lineData.getItemVisual(idx, 'color');
+    let symbolType = lineData.getItemVisual(idx, name);
+    let symbolSize = lineData.getItemVisual(idx, name + 'Size');
 
     if (!symbolType || symbolType === 'none') {
         return;
@@ -63,7 +63,7 @@ function createSymbol(name: string, lineData: List, idx: number) {
     if (!zrUtil.isArray(symbolSize)) {
         symbolSize = [symbolSize, symbolSize];
     }
-    var symbolPath = symbolUtil.createSymbol(
+    let symbolPath = symbolUtil.createSymbol(
         symbolType, -symbolSize[0] / 2, -symbolSize[1] / 2,
         symbolSize[0], symbolSize[1], color
     );
@@ -74,7 +74,7 @@ function createSymbol(name: string, lineData: List, idx: number) {
 }
 
 function createLine(points: number[][]) {
-    var line = new ECLinePath({
+    let line = new ECLinePath({
         name: 'line',
         subPixelOptimize: true
     });
@@ -94,7 +94,7 @@ function setLinePoints(targetShape: ECLinePath['shape'], points: number[][]) {
     targetShape.y2 = points[1][1];
     targetShape.percent = 1;
 
-    var cp1 = points[2];
+    let cp1 = points[2];
     if (cp1) {
         (targetShape as CurveShape).cpx1 = cp1[0];
         (targetShape as CurveShape).cpy1 = cp1[1];
@@ -117,9 +117,9 @@ class Line extends graphic.Group {
     }
 
     _createLine(lineData: List, idx: number, seriesScope?: LineDrawSeriesScope) {
-        var seriesModel = lineData.hostModel;
-        var linePoints = lineData.getItemLayout(idx);
-        var line = createLine(linePoints);
+        let seriesModel = lineData.hostModel;
+        let linePoints = lineData.getItemLayout(idx);
+        let line = createLine(linePoints);
         line.shape.percent = 0;
         graphic.initProps(line, {
             shape: {
@@ -129,7 +129,7 @@ class Line extends graphic.Group {
 
         this.add(line);
 
-        var label = new graphic.Text({
+        let label = new graphic.Text({
             name: 'label'
         }) as InnerLineLabel;
         // FIXME
@@ -139,7 +139,7 @@ class Line extends graphic.Group {
         this.add(label);
 
         zrUtil.each(SYMBOL_CATEGORIES, function (symbolCategory) {
-            var symbol = createSymbol(symbolCategory, lineData, idx);
+            let symbol = createSymbol(symbolCategory, lineData, idx);
             // symbols must added after line to make sure
             // it will be updated after line#update.
             // Or symbol position and rotation update in line#beforeUpdate will be one frame slow
@@ -151,11 +151,11 @@ class Line extends graphic.Group {
     }
 
     updateData(lineData: List, idx: number, seriesScope: LineDrawSeriesScope) {
-        var seriesModel = lineData.hostModel;
+        let seriesModel = lineData.hostModel;
 
-        var line = this.childOfName('line') as ECLinePath;
-        var linePoints = lineData.getItemLayout(idx);
-        var target = {
+        let line = this.childOfName('line') as ECLinePath;
+        let linePoints = lineData.getItemLayout(idx);
+        let target = {
             shape: {} as ECLinePath['shape']
         };
 
@@ -163,12 +163,12 @@ class Line extends graphic.Group {
         graphic.updateProps(line, target, seriesModel, idx);
 
         zrUtil.each(SYMBOL_CATEGORIES, function (symbolCategory) {
-            var symbolType = lineData.getItemVisual(idx, symbolCategory);
-            var key = makeSymbolTypeKey(symbolCategory);
+            let symbolType = lineData.getItemVisual(idx, symbolCategory);
+            let key = makeSymbolTypeKey(symbolCategory);
             // Symbol changed
             if (this[key] !== symbolType) {
                 this.remove(this.childOfName(symbolCategory));
-                var symbol = createSymbol(symbolCategory, lineData, idx);
+                let symbol = createSymbol(symbolCategory, lineData, idx);
                 this.add(symbol);
             }
             this[key] = symbolType;
@@ -178,18 +178,18 @@ class Line extends graphic.Group {
     };
 
     _updateCommonStl(lineData: List, idx: number, seriesScope?: LineDrawSeriesScope) {
-        var seriesModel = lineData.hostModel as SeriesModel;
+        let seriesModel = lineData.hostModel as SeriesModel;
 
-        var line = this.childOfName('line') as ECLinePath;
+        let line = this.childOfName('line') as ECLinePath;
 
-        var lineStyle = seriesScope && seriesScope.lineStyle;
-        var hoverLineStyle = seriesScope && seriesScope.hoverLineStyle;
-        var labelModel = seriesScope && seriesScope.labelModel;
-        var hoverLabelModel = seriesScope && seriesScope.hoverLabelModel;
+        let lineStyle = seriesScope && seriesScope.lineStyle;
+        let hoverLineStyle = seriesScope && seriesScope.hoverLineStyle;
+        let labelModel = seriesScope && seriesScope.labelModel;
+        let hoverLabelModel = seriesScope && seriesScope.hoverLabelModel;
 
         // Optimization for large dataset
         if (!seriesScope || lineData.hasItemOption) {
-            var itemModel = lineData.getItemModel<LineDrawModelOption>(idx);
+            let itemModel = lineData.getItemModel<LineDrawModelOption>(idx);
 
             lineStyle = itemModel.getModel('lineStyle').getLineStyle();
             hoverLineStyle = itemModel.getModel(['emphasis', 'lineStyle']).getLineStyle();
@@ -198,8 +198,8 @@ class Line extends graphic.Group {
             hoverLabelModel = itemModel.getModel(['emphasis', 'label']);
         }
 
-        var visualColor = lineData.getItemVisual(idx, 'color');
-        var visualOpacity = zrUtil.retrieve3(
+        let visualColor = lineData.getItemVisual(idx, 'color');
+        let visualOpacity = zrUtil.retrieve3(
             lineData.getItemVisual(idx, 'opacity'),
             lineStyle.opacity,
             1
@@ -218,7 +218,7 @@ class Line extends graphic.Group {
 
         // Update symbol
         zrUtil.each(SYMBOL_CATEGORIES, function (symbolCategory) {
-            var symbol = this.childOfName(symbolCategory) as ECSymbol;
+            let symbol = this.childOfName(symbolCategory) as ECSymbol;
             if (symbol) {
                 symbol.setColor(visualColor);
                 symbol.setStyle({
@@ -227,12 +227,12 @@ class Line extends graphic.Group {
             }
         }, this);
 
-        var showLabel = labelModel.getShallow('show');
-        var hoverShowLabel = hoverLabelModel.getShallow('show');
+        let showLabel = labelModel.getShallow('show');
+        let hoverShowLabel = hoverLabelModel.getShallow('show');
 
-        var label = this.childOfName('label') as InnerLineLabel;
-        var defaultLabelColor;
-        var baseText;
+        let label = this.childOfName('label') as InnerLineLabel;
+        let defaultLabelColor;
+        let baseText;
 
         // FIXME: the logic below probably should be merged to `graphic.setLabelStyle`.
         if (showLabel || hoverShowLabel) {
@@ -240,7 +240,7 @@ class Line extends graphic.Group {
 
             baseText = seriesModel.getFormattedLabel(idx, 'normal', lineData.dataType);
             if (baseText == null) {
-                var rawVal = seriesModel.getRawValue(idx) as number;
+                let rawVal = seriesModel.getRawValue(idx) as number;
                 baseText = rawVal == null
                     ? lineData.getName(idx)
                     : isFinite(rawVal)
@@ -248,15 +248,15 @@ class Line extends graphic.Group {
                     : rawVal;
             }
         }
-        var normalText = showLabel ? baseText : null;
-        var emphasisText = hoverShowLabel
+        let normalText = showLabel ? baseText : null;
+        let emphasisText = hoverShowLabel
             ? zrUtil.retrieve2(
                 seriesModel.getFormattedLabel(idx, 'emphasis', lineData.dataType),
                 baseText
             )
             : null;
 
-        var labelStyle = label.style;
+        let labelStyle = label.style;
 
         // Always set `textStyle` even if `normalStyle.text` is null, because default
         // values have to be set on `normalStyle`.
@@ -272,7 +272,7 @@ class Line extends graphic.Group {
             // 'start', 'middle', 'end'
             label.__position = labelModel.get('position') || 'middle';
 
-            var distance = labelModel.get('distance');
+            let distance = labelModel.get('distance');
             if (!zrUtil.isArray(distance)) {
                 distance = [distance, distance];
             }
@@ -316,23 +316,23 @@ class Line extends graphic.Group {
     }
 
     setLinePoints(points: number[][]) {
-        var linePath = this.childOfName('line') as ECLinePath;
+        let linePath = this.childOfName('line') as ECLinePath;
         setLinePoints(linePath.shape, points);
         linePath.dirty();
     }
 
     beforeUpdate() {
-        var lineGroup = this;
-        var symbolFrom = lineGroup.childOfName('fromSymbol') as ECSymbol;
-        var symbolTo = lineGroup.childOfName('toSymbol') as ECSymbol;
-        var label = lineGroup.childOfName('label') as InnerLineLabel;
+        let lineGroup = this;
+        let symbolFrom = lineGroup.childOfName('fromSymbol') as ECSymbol;
+        let symbolTo = lineGroup.childOfName('toSymbol') as ECSymbol;
+        let label = lineGroup.childOfName('label') as InnerLineLabel;
         // Quick reject
         if (!symbolFrom && !symbolTo && label.ignore) {
             return;
         }
 
-        var invScale = 1;
-        var parentNode = this.parent;
+        let invScale = 1;
+        let parentNode = this.parent;
         while (parentNode) {
             if (parentNode.scale) {
                 invScale /= parentNode.scale[0];
@@ -340,18 +340,18 @@ class Line extends graphic.Group {
             parentNode = parentNode.parent;
         }
 
-        var line = lineGroup.childOfName('line') as ECLinePath;
+        let line = lineGroup.childOfName('line') as ECLinePath;
         // If line not changed
         // FIXME Parent scale changed
         if (!this.__dirty && !line.__dirty) {
             return;
         }
 
-        var percent = line.shape.percent;
-        var fromPos = line.pointAt(0);
-        var toPos = line.pointAt(percent);
+        let percent = line.shape.percent;
+        let fromPos = line.pointAt(0);
+        let toPos = line.pointAt(percent);
 
-        var d = vector.sub([], toPos, fromPos);
+        let d = vector.sub([], toPos, fromPos);
         vector.normalize(d, d);
 
         if (symbolFrom) {
@@ -374,33 +374,33 @@ class Line extends graphic.Group {
         if (!label.ignore) {
             label.attr('position', toPos);
 
-            var textPosition;
-            var textAlign: ZRTextAlign;
-            var textVerticalAlign: ZRTextVerticalAlign;
-            var textOrigin;
-
-            var distance = label.__labelDistance;
-            var distanceX = distance[0] * invScale;
-            var distanceY = distance[1] * invScale;
-            var halfPercent = percent / 2;
-            var tangent = line.tangentAt(halfPercent);
-            var n = [tangent[1], -tangent[0]];
-            var cp = line.pointAt(halfPercent);
+            let textPosition;
+            let textAlign: ZRTextAlign;
+            let textVerticalAlign: ZRTextVerticalAlign;
+            let textOrigin;
+
+            let distance = label.__labelDistance;
+            let distanceX = distance[0] * invScale;
+            let distanceY = distance[1] * invScale;
+            let halfPercent = percent / 2;
+            let tangent = line.tangentAt(halfPercent);
+            let n = [tangent[1], -tangent[0]];
+            let cp = line.pointAt(halfPercent);
             if (n[1] > 0) {
                 n[0] = -n[0];
                 n[1] = -n[1];
             }
-            var dir = tangent[0] < 0 ? -1 : 1;
+            let dir = tangent[0] < 0 ? -1 : 1;
 
             if (label.__position !== 'start' && label.__position !== 'end') {
-                var rotation = -Math.atan2(tangent[1], tangent[0]);
+                let rotation = -Math.atan2(tangent[1], tangent[0]);
                 if (toPos[0] < fromPos[0]) {
                     rotation = Math.PI + rotation;
                 }
                 label.attr('rotation', rotation);
             }
 
-            var dy;
+            let dy;
             switch (label.__position) {
                 case 'insideStartTop':
                 case 'insideMiddleTop':
diff --git a/src/chart/helper/LineDraw.ts b/src/chart/helper/LineDraw.ts
index 78242aa..4172eb3 100644
--- a/src/chart/helper/LineDraw.ts
+++ b/src/chart/helper/LineDraw.ts
@@ -102,10 +102,10 @@ class LineDraw {
     };
 
     updateData(lineData: ListForLineDraw) {
-        var lineDraw = this;
-        var group = lineDraw.group;
+        let lineDraw = this;
+        let group = lineDraw.group;
 
-        var oldLineData = lineDraw._lineData;
+        let oldLineData = lineDraw._lineData;
         lineDraw._lineData = lineData;
 
         // There is no oldLineData only when first rendering or switching from
@@ -114,7 +114,7 @@ class LineDraw {
             group.removeAll();
         }
 
-        var seriesScope = makeSeriesScope(lineData);
+        let seriesScope = makeSeriesScope(lineData);
 
         lineData.diff(oldLineData)
             .add((idx) => {
@@ -130,7 +130,7 @@ class LineDraw {
     };
 
     updateLayout() {
-        var lineData = this._lineData;
+        let lineData = this._lineData;
 
         // Do not support update layout in incremental mode.
         if (!lineData) {
@@ -155,11 +155,11 @@ class LineDraw {
             }
         }
 
-        for (var idx = taskParams.start; idx < taskParams.end; idx++) {
-            var itemLayout = lineData.getItemLayout(idx);
+        for (let idx = taskParams.start; idx < taskParams.end; idx++) {
+            let itemLayout = lineData.getItemLayout(idx);
 
             if (lineNeedsDraw(itemLayout)) {
-                var el = new this._LineCtor(lineData, idx, this._seriesScope);
+                let el = new this._LineCtor(lineData, idx, this._seriesScope);
                 el.traverse(updateIncrementalAndHover);
 
                 this.group.add(el);
@@ -177,13 +177,13 @@ class LineDraw {
         idx: number,
         seriesScope: LineDrawSeriesScope
     ) {
-        var itemLayout = lineData.getItemLayout(idx);
+        let itemLayout = lineData.getItemLayout(idx);
 
         if (!lineNeedsDraw(itemLayout)) {
             return;
         }
 
-        var el = new this._LineCtor(lineData, idx, seriesScope);
+        let el = new this._LineCtor(lineData, idx, seriesScope);
         lineData.setItemGraphicEl(idx, el);
         this.group.add(el);
     }
@@ -194,7 +194,7 @@ class LineDraw {
         newIdx: number,
         seriesScope: LineDrawSeriesScope
     ) {
-        var itemEl = oldLineData.getItemGraphicEl(oldIdx) as LineLike;
+        let itemEl = oldLineData.getItemGraphicEl(oldIdx) as LineLike;
 
         if (!lineNeedsDraw(newLineData.getItemLayout(newIdx))) {
             this.group.remove(itemEl);
@@ -215,7 +215,7 @@ class LineDraw {
 }
 
 function makeSeriesScope(lineData: ListForLineDraw) {
-    var hostModel = lineData.hostModel;
+    let hostModel = lineData.hostModel;
     return {
         lineStyle: hostModel.getModel('lineStyle').getLineStyle(),
         hoverLineStyle: hostModel.getModel(['emphasis', 'lineStyle']).getLineStyle(),
diff --git a/src/chart/helper/LinePath.ts b/src/chart/helper/LinePath.ts
index bd48d81..3783f5e 100644
--- a/src/chart/helper/LinePath.ts
+++ b/src/chart/helper/LinePath.ts
@@ -25,8 +25,8 @@ import * as graphic from '../../util/graphic';
 import * as vec2 from 'zrender/src/core/vector';
 import { PathProps } from 'zrender/src/graphic/Path';
 
-var straightLineProto = graphic.Line.prototype;
-var bezierCurveProto = graphic.BezierCurve.prototype;
+const straightLineProto = graphic.Line.prototype;
+const bezierCurveProto = graphic.BezierCurve.prototype;
 
 class StraightLineShape {
     // Start point
@@ -83,8 +83,8 @@ class ECLinePath extends graphic.Path<ECLineProps> {
     }
 
     tangentAt(t: number) {
-        var shape = this.shape;
-        var p = isStraightLine(shape)
+        let shape = this.shape;
+        let p = isStraightLine(shape)
             ? [shape.x2 - shape.x1, shape.y2 - shape.y1]
             : bezierCurveProto.tangentAt.call(this, t);
         return vec2.normalize(p, p);
diff --git a/src/chart/helper/Polyline.ts b/src/chart/helper/Polyline.ts
index 3efeb39..c07ff48 100644
--- a/src/chart/helper/Polyline.ts
+++ b/src/chart/helper/Polyline.ts
@@ -29,10 +29,10 @@ class Polyline extends graphic.Group {
     }
 
     private _createPolyline(lineData: List, idx: number, seriesScope: LineDrawSeriesScope) {
-        // var seriesModel = lineData.hostModel;
-        var points = lineData.getItemLayout(idx);
+        // let seriesModel = lineData.hostModel;
+        let points = lineData.getItemLayout(idx);
 
-        var line = new graphic.Polyline({
+        let line = new graphic.Polyline({
             shape: {
                 points: points
             }
@@ -44,10 +44,10 @@ class Polyline extends graphic.Group {
     };
 
     updateData(lineData: List, idx: number, seriesScope: LineDrawSeriesScope) {
-        var seriesModel = lineData.hostModel;
+        let seriesModel = lineData.hostModel;
 
-        var line = this.childAt(0) as graphic.Polyline;
-        var target = {
+        let line = this.childAt(0) as graphic.Polyline;
+        let target = {
             shape: {
                 points: lineData.getItemLayout(idx) as number[][]
             }
@@ -58,13 +58,13 @@ class Polyline extends graphic.Group {
     };
 
     _updateCommonStl(lineData: List, idx: number, seriesScope: LineDrawSeriesScope) {
-        var line = this.childAt(0) as graphic.Polyline;
-        var itemModel = lineData.getItemModel<LineDrawModelOption>(idx);
+        let line = this.childAt(0) as graphic.Polyline;
+        let itemModel = lineData.getItemModel<LineDrawModelOption>(idx);
 
-        var visualColor = lineData.getItemVisual(idx, 'color');
+        let visualColor = lineData.getItemVisual(idx, 'color');
 
-        var lineStyle = seriesScope && seriesScope.lineStyle;
-        var hoverLineStyle = seriesScope && seriesScope.hoverLineStyle;
+        let lineStyle = seriesScope && seriesScope.lineStyle;
+        let hoverLineStyle = seriesScope && seriesScope.hoverLineStyle;
 
         if (!seriesScope || lineData.hasItemOption) {
             lineStyle = itemModel.getModel('lineStyle').getLineStyle();
@@ -84,7 +84,7 @@ class Polyline extends graphic.Group {
     };
 
     updateLayout(lineData: List, idx: number) {
-        var polyline = this.childAt(0) as graphic.Polyline;
+        let polyline = this.childAt(0) as graphic.Polyline;
         polyline.setShape('points', lineData.getItemLayout(idx));
     };
 
diff --git a/src/chart/helper/Symbol.ts b/src/chart/helper/Symbol.ts
index 56c1ee7..4deb542 100644
--- a/src/chart/helper/Symbol.ts
+++ b/src/chart/helper/Symbol.ts
@@ -61,15 +61,15 @@ class Symbol extends graphic.Group {
         // Remove paths created before
         this.removeAll();
 
-        var color = data.getItemVisual(idx, 'color');
+        let color = data.getItemVisual(idx, 'color');
 
-        // var symbolPath = createSymbol(
+        // let symbolPath = createSymbol(
         //     symbolType, -0.5, -0.5, 1, 1, color
         // );
         // If width/height are set too small (e.g., set to 1) on ios10
         // and macOS Sierra, a circle stroke become a rect, no matter what
         // the scale is set. So we set width/height as 2. See #4150.
-        var symbolPath = createSymbol(
+        let symbolPath = createSymbol(
             symbolType, -1, -1, 2, 2, color, keepAspect
         );
 
@@ -134,13 +134,13 @@ class Symbol extends graphic.Group {
      * @param {number} z
      */
     setZ(zlevel: number, z: number) {
-        var symbolPath = this.childAt(0) as ECSymbol;
+        let symbolPath = this.childAt(0) as ECSymbol;
         symbolPath.zlevel = zlevel;
         symbolPath.z = z;
     }
 
     setDraggable(draggable: boolean) {
-        var symbolPath = this.childAt(0) as ECSymbol;
+        let symbolPath = this.childAt(0) as ECSymbol;
         symbolPath.draggable = draggable;
         symbolPath.cursor = draggable ? 'move' : symbolPath.cursor;
     }
@@ -151,13 +151,13 @@ class Symbol extends graphic.Group {
     updateData(data: List, idx: number, seriesScope?: SymbolDrawSeriesScope) {
         this.silent = false;
 
-        var symbolType = data.getItemVisual(idx, 'symbol') || 'circle';
-        var seriesModel = data.hostModel as SeriesModel;
-        var symbolSize = Symbol.getSymbolSize(data, idx);
-        var isInit = symbolType !== this._symbolType;
+        let symbolType = data.getItemVisual(idx, 'symbol') || 'circle';
+        let seriesModel = data.hostModel as SeriesModel;
+        let symbolSize = Symbol.getSymbolSize(data, idx);
+        let isInit = symbolType !== this._symbolType;
 
         if (isInit) {
-            var keepAspect = data.getItemVisual(idx, 'symbolKeepAspect');
+            let keepAspect = data.getItemVisual(idx, 'symbolKeepAspect');
             this._createSymbol(symbolType, data, idx, symbolSize, keepAspect);
         }
         else {
@@ -172,9 +172,9 @@ class Symbol extends graphic.Group {
 
         if (isInit) {
             const symbolPath = this.childAt(0) as ECSymbol;
-            var fadeIn = seriesScope && seriesScope.fadeIn;
+            let fadeIn = seriesScope && seriesScope.fadeIn;
 
-            var target: PathProps = {
+            let target: PathProps = {
                 scale: symbolPath.scale.slice()
             };
             fadeIn && (target.style = {
@@ -196,9 +196,9 @@ class Symbol extends graphic.Group {
         symbolSize: number[],
         seriesScope?: SymbolDrawSeriesScope
     ) {
-        var symbolPath = this.childAt(0) as ECSymbol;
-        var seriesModel = data.hostModel as SeriesModel;
-        var color = data.getItemVisual(idx, 'color');
+        let symbolPath = this.childAt(0) as ECSymbol;
+        let seriesModel = data.hostModel as SeriesModel;
+        let color = data.getItemVisual(idx, 'color');
 
         // Reset style
         if (symbolPath.type !== 'image') {
@@ -216,17 +216,17 @@ class Symbol extends graphic.Group {
             });
         }
 
-        var itemStyle = seriesScope && seriesScope.itemStyle;
-        var hoverItemStyle = seriesScope && seriesScope.hoverItemStyle;
-        var symbolRotate = seriesScope && seriesScope.symbolRotate;
-        var symbolOffset = seriesScope && seriesScope.symbolOffset;
-        var labelModel = seriesScope && seriesScope.labelModel;
-        var hoverLabelModel = seriesScope && seriesScope.hoverLabelModel;
-        var hoverAnimation = seriesScope && seriesScope.hoverAnimation;
-        var cursorStyle = seriesScope && seriesScope.cursorStyle;
+        let itemStyle = seriesScope && seriesScope.itemStyle;
+        let hoverItemStyle = seriesScope && seriesScope.hoverItemStyle;
+        let symbolRotate = seriesScope && seriesScope.symbolRotate;
+        let symbolOffset = seriesScope && seriesScope.symbolOffset;
+        let labelModel = seriesScope && seriesScope.labelModel;
+        let hoverLabelModel = seriesScope && seriesScope.hoverLabelModel;
+        let hoverAnimation = seriesScope && seriesScope.hoverAnimation;
+        let cursorStyle = seriesScope && seriesScope.cursorStyle;
 
         if (!seriesScope || data.hasItemOption) {
-            var itemModel = (seriesScope && seriesScope.itemModel)
+            let itemModel = (seriesScope && seriesScope.itemModel)
                 ? seriesScope.itemModel : data.getItemModel<SymbolDrawItemModelOption>(idx);
 
             // Color must be excluded.
@@ -246,7 +246,7 @@ class Symbol extends graphic.Group {
             hoverItemStyle = zrUtil.extend({}, hoverItemStyle);
         }
 
-        var elStyle = symbolPath.style;
+        let elStyle = symbolPath.style;
 
         symbolPath.attr('rotation', (symbolRotate || 0) * Math.PI / 180 || 0);
 
@@ -264,13 +264,13 @@ class Symbol extends graphic.Group {
 
         symbolPath.setStyle(itemStyle);
 
-        var opacity = data.getItemVisual(idx, 'opacity');
+        let opacity = data.getItemVisual(idx, 'opacity');
         if (opacity != null) {
             elStyle.opacity = opacity;
         }
 
-        var liftZ = data.getItemVisual(idx, 'liftZ');
-        var z2Origin = symbolPath.__z2Origin;
+        let liftZ = data.getItemVisual(idx, 'liftZ');
+        let z2Origin = symbolPath.__z2Origin;
         if (liftZ != null) {
             if (z2Origin == null) {
                 symbolPath.__z2Origin = symbolPath.z2;
@@ -282,7 +282,7 @@ class Symbol extends graphic.Group {
             symbolPath.__z2Origin = null;
         }
 
-        var useNameLabel = seriesScope && seriesScope.useNameLabel;
+        let useNameLabel = seriesScope && seriesScope.useNameLabel;
 
         graphic.setLabelStyle(
             elStyle, hoverItemStyle, labelModel, hoverLabelModel,
@@ -312,7 +312,7 @@ class Symbol extends graphic.Group {
     fadeOut(cb: () => void, opt?: {
         keepLabel: boolean
     }) {
-        var symbolPath = this.childAt(0) as ECSymbol;
+        let symbolPath = this.childAt(0) as ECSymbol;
         // Avoid mistaken hover when fading out
         this.silent = symbolPath.silent = true;
         // Not show text when animating
@@ -333,7 +333,7 @@ class Symbol extends graphic.Group {
     }
 
     static getSymbolSize(data: List, idx: number) {
-        var symbolSize = data.getItemVisual(idx, 'symbolSize');
+        let symbolSize = data.getItemVisual(idx, 'symbolSize');
         return symbolSize instanceof Array
             ? symbolSize.slice()
             : [+symbolSize, +symbolSize];
@@ -348,9 +348,9 @@ function highDownOnUpdate(this: ECSymbol, fromState: DisplayState, toState: Disp
     }
 
     if (toState === 'emphasis') {
-        var scale = this.__symbolOriginalScale;
-        var ratio = scale[1] / scale[0];
-        var emphasisOpt = {
+        let scale = this.__symbolOriginalScale;
+        let ratio = scale[1] / scale[0];
+        let emphasisOpt = {
             scale: [
                 Math.max(scale[0] * 1.1, scale[0] + 3),
                 Math.max(scale[1] * 1.1, scale[1] + 3 * ratio)
diff --git a/src/chart/helper/SymbolDraw.ts b/src/chart/helper/SymbolDraw.ts
index e86081b..c35349a 100644
--- a/src/chart/helper/SymbolDraw.ts
+++ b/src/chart/helper/SymbolDraw.ts
@@ -109,7 +109,7 @@ export interface SymbolDrawSeriesScope {
 }
 
 function makeSeriesScope(data: List): SymbolDrawSeriesScope {
-    var seriesModel = data.hostModel;
+    let seriesModel = data.hostModel;
     return {
         itemStyle: seriesModel.getModel('itemStyle').getItemStyle(['color']),
         hoverItemStyle: seriesModel.getModel(['emphasis', 'itemStyle']).getItemStyle(),
@@ -143,12 +143,12 @@ class SymbolDraw {
     updateData(data: ListForSymbolDraw, opt?: UpdateOpt) {
         opt = normalizeUpdateOpt(opt);
 
-        var group = this.group;
-        var seriesModel = data.hostModel;
-        var oldData = this._data;
-        var SymbolCtor = this._SymbolCtor;
+        let group = this.group;
+        let seriesModel = data.hostModel;
+        let oldData = this._data;
+        let SymbolCtor = this._SymbolCtor;
 
-        var seriesScope = makeSeriesScope(data);
+        let seriesScope = makeSeriesScope(data);
 
         // There is no oldLineData only when first rendering or switching from
         // stream mode to normal mode, where previous elements should be removed.
@@ -158,17 +158,17 @@ class SymbolDraw {
 
         data.diff(oldData)
             .add(function (newIdx) {
-                var point = data.getItemLayout(newIdx) as number[];
+                let point = data.getItemLayout(newIdx) as number[];
                 if (symbolNeedsDraw(data, point, newIdx, opt)) {
-                    var symbolEl = new SymbolCtor(data, newIdx, seriesScope);
+                    let symbolEl = new SymbolCtor(data, newIdx, seriesScope);
                     symbolEl.attr('position', point);
                     data.setItemGraphicEl(newIdx, symbolEl);
                     group.add(symbolEl);
                 }
             })
             .update(function (newIdx, oldIdx) {
-                var symbolEl = oldData.getItemGraphicEl(oldIdx) as SymbolLike;
-                var point = data.getItemLayout(newIdx) as number[];
+                let symbolEl = oldData.getItemGraphicEl(oldIdx) as SymbolLike;
+                let point = data.getItemLayout(newIdx) as number[];
                 if (!symbolNeedsDraw(data, point, newIdx, opt)) {
                     group.remove(symbolEl);
                     return;
@@ -190,7 +190,7 @@ class SymbolDraw {
                 data.setItemGraphicEl(newIdx, symbolEl);
             })
             .remove(function (oldIdx) {
-                var el = oldData.getItemGraphicEl(oldIdx) as SymbolLike;
+                let el = oldData.getItemGraphicEl(oldIdx) as SymbolLike;
                 el && el.fadeOut(function () {
                     group.remove(el);
                 });
@@ -205,11 +205,11 @@ class SymbolDraw {
     };
 
     updateLayout() {
-        var data = this._data;
+        let data = this._data;
         if (data) {
             // Not use animation
             data.eachItemGraphicEl(function (el, idx) {
-                var point = data.getItemLayout(idx);
+                let point = data.getItemLayout(idx);
                 el.attr('position', point);
             });
         }
@@ -232,10 +232,10 @@ class SymbolDraw {
                 el.incremental = el.useHoverLayer = true;
             }
         }
-        for (var idx = taskParams.start; idx < taskParams.end; idx++) {
-            var point = data.getItemLayout(idx) as number[];
+        for (let idx = taskParams.start; idx < taskParams.end; idx++) {
+            let point = data.getItemLayout(idx) as number[];
             if (symbolNeedsDraw(data, point, idx, opt)) {
-                var el = new this._SymbolCtor(data, idx, this._seriesScope);
+                let el = new this._SymbolCtor(data, idx, this._seriesScope);
                 el.traverse(updateIncrementalAndHover);
                 el.attr('position', point);
                 this.group.add(el);
@@ -245,8 +245,8 @@ class SymbolDraw {
     };
 
     remove(enableAnimation?: boolean) {
-        var group = this.group;
-        var data = this._data;
+        let group = this.group;
+        let data = this._data;
         // Incremental model do not have this._data.
         if (data && enableAnimation) {
             data.eachItemGraphicEl(function (el: SymbolLike) {
diff --git a/src/chart/helper/createClipPathFromCoordSys.ts b/src/chart/helper/createClipPathFromCoordSys.ts
index 89b0551..febd702 100644
--- a/src/chart/helper/createClipPathFromCoordSys.ts
+++ b/src/chart/helper/createClipPathFromCoordSys.ts
@@ -32,22 +32,22 @@ function createGridClipPath(
     hasAnimation: boolean,
     seriesModel: SeriesModelWithLineWidth
 ) {
-    var rect = cartesian.getArea();
-    var isHorizontal = cartesian.getBaseAxis().isHorizontal();
+    let rect = cartesian.getArea();
+    let isHorizontal = cartesian.getBaseAxis().isHorizontal();
 
-    var x = rect.x;
-    var y = rect.y;
-    var width = rect.width;
-    var height = rect.height;
+    let x = rect.x;
+    let y = rect.y;
+    let width = rect.width;
+    let height = rect.height;
 
-    var lineWidth = seriesModel.get(['lineStyle', 'width']) || 2;
+    let lineWidth = seriesModel.get(['lineStyle', 'width']) || 2;
     // Expand the clip path a bit to avoid the border is clipped and looks thinner
     x -= lineWidth / 2;
     y -= lineWidth / 2;
     width += lineWidth;
     height += lineWidth;
 
-    var clipPath = new graphic.Rect({
+    let clipPath = new graphic.Rect({
         shape: {
             x: x,
             y: y,
@@ -74,10 +74,10 @@ function createPolarClipPath(
     hasAnimation: boolean,
     seriesModel: SeriesModelWithLineWidth
 ) {
-    var sectorArea = polar.getArea();
+    let sectorArea = polar.getArea();
     // Avoid float number rounding error for symbol on the edge of axis extent.
 
-    var clipPath = new graphic.Sector({
+    let clipPath = new graphic.Sector({
         shape: {
             cx: round(polar.cx, 1),
             cy: round(polar.cy, 1),
diff --git a/src/chart/helper/createGraphFromNodeEdge.ts b/src/chart/helper/createGraphFromNodeEdge.ts
index e40081f..b59e57c 100644
--- a/src/chart/helper/createGraphFromNodeEdge.ts
+++ b/src/chart/helper/createGraphFromNodeEdge.ts
@@ -30,7 +30,7 @@ import createListFromArray from './createListFromArray';
 export default function (nodes, edges, seriesModel, directed, beforeLink) {
     // ??? TODO
     // support dataset?
-    var graph = new Graph(directed);
+    let graph = new Graph(directed);
     for (let i = 0; i < nodes.length; i++) {
         graph.addNode(zrUtil.retrieve(
             // Id, name, dataIndex
@@ -38,13 +38,13 @@ export default function (nodes, edges, seriesModel, directed, beforeLink) {
         ), i);
     }
 
-    var linkNameList = [];
-    var validEdges = [];
-    var linkCount = 0;
+    let linkNameList = [];
+    let validEdges = [];
+    let linkCount = 0;
     for (let i = 0; i < edges.length; i++) {
-        var link = edges[i];
-        var source = link.source;
-        var target = link.target;
+        let link = edges[i];
+        let source = link.source;
+        let target = link.target;
         // addEdge may fail when source or target not exists
         if (graph.addEdge(source, target, linkCount)) {
             validEdges.push(link);
@@ -53,14 +53,14 @@ export default function (nodes, edges, seriesModel, directed, beforeLink) {
         }
     }
 
-    var coordSys = seriesModel.get('coordinateSystem');
-    var nodeData;
+    let coordSys = seriesModel.get('coordinateSystem');
+    let nodeData;
     if (coordSys === 'cartesian2d' || coordSys === 'polar') {
         nodeData = createListFromArray(nodes, seriesModel);
     }
     else {
-        var coordSysCtor = CoordinateSystem.get(coordSys);
-        var coordDimensions = (coordSysCtor && coordSysCtor.type !== 'view')
+        let coordSysCtor = CoordinateSystem.get(coordSys);
+        let coordDimensions = (coordSysCtor && coordSysCtor.type !== 'view')
             ? (coordSysCtor.dimensions || []) : [];
         // FIXME: Some geo do not need `value` dimenson, whereas `calendar` needs
         // `value` dimension, but graph need `value` dimension. It's better to
@@ -69,14 +69,14 @@ export default function (nodes, edges, seriesModel, directed, beforeLink) {
             coordDimensions.concat(['value']);
         }
 
-        var dimensionNames = createDimensions(nodes, {
+        let dimensionNames = createDimensions(nodes, {
             coordDimensions: coordDimensions
         });
         nodeData = new List(dimensionNames, seriesModel);
         nodeData.initData(nodes);
     }
 
-    var edgeData = new List(['value'], seriesModel);
+    let edgeData = new List(['value'], seriesModel);
     edgeData.initData(validEdges, linkNameList);
 
     beforeLink && beforeLink(nodeData, edgeData);
diff --git a/src/chart/helper/createListFromArray.ts b/src/chart/helper/createListFromArray.ts
index b9cc20a..42b3e50 100644
--- a/src/chart/helper/createListFromArray.ts
+++ b/src/chart/helper/createListFromArray.ts
@@ -40,21 +40,21 @@ function createListFromArray(source: Source | any[], seriesModel: SeriesModel, o
         source = Source.seriesDataToSource(source);
     }
 
-    var coordSysName = seriesModel.get('coordinateSystem');
-    var registeredCoordSys = CoordinateSystem.get(coordSysName);
+    let coordSysName = seriesModel.get('coordinateSystem');
+    let registeredCoordSys = CoordinateSystem.get(coordSysName);
 
-    var coordSysInfo = getCoordSysInfoBySeries(seriesModel);
+    let coordSysInfo = getCoordSysInfoBySeries(seriesModel);
 
-    var coordSysDimDefs: DimensionDefinitionLoose[];
+    let coordSysDimDefs: DimensionDefinitionLoose[];
 
     if (coordSysInfo) {
         coordSysDimDefs = zrUtil.map(coordSysInfo.coordSysDims, function (dim) {
-            var dimInfo = {
+            let dimInfo = {
                 name: dim
             } as DimensionDefinition;
-            var axisModel = coordSysInfo.axisMap.get(dim);
+            let axisModel = coordSysInfo.axisMap.get(dim);
             if (axisModel) {
-                var axisType = axisModel.get('type');
+                let axisType = axisModel.get('type');
                 dimInfo.type = getDimensionTypeByAxis(axisType);
                 // dimInfo.stackable = isStackable(axisType);
             }
@@ -71,7 +71,7 @@ function createListFromArray(source: Source | any[], seriesModel: SeriesModel, o
         )) || ['x', 'y'];
     }
 
-    var dimInfoList = createDimensions(source, {
+    let dimInfoList = createDimensions(source, {
         coordDimensions: coordSysDimDefs,
         generateCoord: opt.generateCoord,
         encodeDefaulter: opt.useEncodeDefaulter
@@ -79,11 +79,11 @@ function createListFromArray(source: Source | any[], seriesModel: SeriesModel, o
             : null
     });
 
-    var firstCategoryDimIndex: number;
-    var hasNameEncode: boolean;
+    let firstCategoryDimIndex: number;
+    let hasNameEncode: boolean;
     coordSysInfo && zrUtil.each(dimInfoList, function (dimInfo, dimIndex) {
-        var coordDim = dimInfo.coordDim;
-        var categoryAxisModel = coordSysInfo.categoryAxisMap.get(coordDim);
+        let coordDim = dimInfo.coordDim;
+        let categoryAxisModel = coordSysInfo.categoryAxisMap.get(coordDim);
         if (categoryAxisModel) {
             if (firstCategoryDimIndex == null) {
                 firstCategoryDimIndex = dimIndex;
@@ -98,13 +98,13 @@ function createListFromArray(source: Source | any[], seriesModel: SeriesModel, o
         dimInfoList[firstCategoryDimIndex].otherDims.itemName = 0;
     }
 
-    var stackCalculationInfo = enableDataStack(seriesModel, dimInfoList);
+    let stackCalculationInfo = enableDataStack(seriesModel, dimInfoList);
 
-    var list = new List(dimInfoList, seriesModel);
+    let list = new List(dimInfoList, seriesModel);
 
     list.setCalculationInfo(stackCalculationInfo);
 
-    var dimValueGetter = (firstCategoryDimIndex != null && isNeedCompleteOrdinalData(source))
+    let dimValueGetter = (firstCategoryDimIndex != null && isNeedCompleteOrdinalData(source))
         ? function (this: List, itemOpt: any, dimName: string, dataIndex: number, dimIndex: number) {
             // Use dataIndex as ordinal value in categoryAxis
             return dimIndex === firstCategoryDimIndex
@@ -121,14 +121,14 @@ function createListFromArray(source: Source | any[], seriesModel: SeriesModel, o
 
 function isNeedCompleteOrdinalData(source: Source) {
     if (source.sourceFormat === SOURCE_FORMAT_ORIGINAL) {
-        var sampleItem = firstDataNotNull(source.data as ArrayLike<any> || []);
+        let sampleItem = firstDataNotNull(source.data as ArrayLike<any> || []);
         return sampleItem != null
             && !zrUtil.isArray(getDataItemValue(sampleItem));
     }
 }
 
 function firstDataNotNull(data: ArrayLike<any>) {
-    var i = 0;
+    let i = 0;
     while (i < data.length && data[i] == null) {
         i++;
     }
diff --git a/src/chart/helper/createListSimply.ts b/src/chart/helper/createListSimply.ts
index e934396..ac27f00 100644
--- a/src/chart/helper/createListSimply.ts
+++ b/src/chart/helper/createListSimply.ts
@@ -39,11 +39,11 @@ export default function (
 ): List {
     opt = isArray(opt) && {coordDimensions: opt} || extend({}, opt);
 
-    var source = seriesModel.getSource();
+    let source = seriesModel.getSource();
 
-    var dimensionsInfo = createDimensions(source, opt as CreateDimensionsParams);
+    let dimensionsInfo = createDimensions(source, opt as CreateDimensionsParams);
 
-    var list = new List(dimensionsInfo, seriesModel);
+    let list = new List(dimensionsInfo, seriesModel);
     list.initData(source, nameList);
 
     return list;
diff --git a/src/chart/helper/createRenderPlanner.ts b/src/chart/helper/createRenderPlanner.ts
index c1c1b76..15d4465 100644
--- a/src/chart/helper/createRenderPlanner.ts
+++ b/src/chart/helper/createRenderPlanner.ts
@@ -27,20 +27,20 @@ import { StageHandlerPlanReturn } from '../../util/types';
  * @return {string} If large mode changed, return string 'reset';
  */
 export default function () {
-    var inner = makeInner();
+    let inner = makeInner();
 
     return function (seriesModel: SeriesModel): StageHandlerPlanReturn {
-        var fields = inner(seriesModel);
-        var pipelineContext = seriesModel.pipelineContext;
+        let fields = inner(seriesModel);
+        let pipelineContext = seriesModel.pipelineContext;
 
-        var originalLarge = fields.large;
-        var originalProgressive = fields.progressiveRender;
+        let originalLarge = fields.large;
+        let originalProgressive = fields.progressiveRender;
 
         // FIXME: if the planner works on a filtered series, `pipelineContext` does not
         // exists. See #11611 . Probably we need to modify this structure, see the comment
         // on `performRawSeries` in `Schedular.js`.
-        var large = fields.large = pipelineContext && pipelineContext.large;
-        var progressive = fields.progressiveRender = pipelineContext && pipelineContext.progressiveRender;
+        let large = fields.large = pipelineContext && pipelineContext.large;
+        let progressive = fields.progressiveRender = pipelineContext && pipelineContext.progressiveRender;
 
         return (
             !!((originalLarge ^ large as any) || (originalProgressive ^ progressive as any)) && 'reset'
diff --git a/src/chart/helper/labelHelper.ts b/src/chart/helper/labelHelper.ts
index 31cbf07..1273e98 100644
--- a/src/chart/helper/labelHelper.ts
+++ b/src/chart/helper/labelHelper.ts
@@ -25,17 +25,17 @@ import List from '../../data/List';
  * @return label string. Not null/undefined
  */
 export function getDefaultLabel(data: List, dataIndex: number): string {
-    var labelDims = data.mapDimension('defaultedLabel', true);
-    var len = labelDims.length;
+    let labelDims = data.mapDimension('defaultedLabel', true);
+    let len = labelDims.length;
 
     // Simple optimization (in lots of cases, label dims length is 1)
     if (len === 1) {
         return retrieveRawValue(data, dataIndex, labelDims[0]);
     }
     else if (len) {
-        var vals = [];
-        for (var i = 0; i < labelDims.length; i++) {
-            var val = retrieveRawValue(data, dataIndex, labelDims[i]);
+        let vals = [];
+        for (let i = 0; i < labelDims.length; i++) {
+            let val = retrieveRawValue(data, dataIndex, labelDims[i]);
             vals.push(val);
         }
         return vals.join(' ');
diff --git a/src/chart/helper/treeHelper.ts b/src/chart/helper/treeHelper.ts
index a2461fb..cb94b17 100644
--- a/src/chart/helper/treeHelper.ts
+++ b/src/chart/helper/treeHelper.ts
@@ -31,8 +31,8 @@ export function retrieveTargetInfo(
     seriesModel: SeriesModel
 ) {
     if (payload && zrUtil.indexOf(validPayloadTypes, payload.type) >= 0) {
-        var root = seriesModel.getData().tree.root;
-        var targetNode = payload.targetNode;
+        let root = seriesModel.getData().tree.root;
+        let targetNode = payload.targetNode;
 
         if (typeof targetNode === 'string') {
             targetNode = root.getNodeById(targetNode);
@@ -44,7 +44,7 @@ export function retrieveTargetInfo(
             };
         }
 
-        var targetNodeId = payload.targetNodeId;
+        let targetNodeId = payload.targetNodeId;
         if (targetNodeId != null && (targetNode = root.getNodeById(targetNodeId))) {
             return {
                 node: targetNode
@@ -55,7 +55,7 @@ export function retrieveTargetInfo(
 
 // Not includes the given node at the last item.
 export function getPathToRoot(node: TreeNode): TreeNode[] {
-    var path = [];
+    let path = [];
     while (node) {
         node = node.parentNode;
         node && path.push(node);
@@ -64,17 +64,17 @@ export function getPathToRoot(node: TreeNode): TreeNode[] {
 }
 
 export function aboveViewRoot(viewRoot: TreeNode, node: TreeNode) {
-    var viewPath = getPathToRoot(viewRoot);
+    let viewPath = getPathToRoot(viewRoot);
     return zrUtil.indexOf(viewPath, node) >= 0;
 }
 
 
 // From root to the input node (the input node will be included).
 export function wrapTreePathInfo<T = unknown>(node: TreeNode, seriesModel: SeriesModel) {
-    var treePathInfo = [];
+    let treePathInfo = [];
 
     while (node) {
-        var nodeDataIndex = node.dataIndex;
+        let nodeDataIndex = node.dataIndex;
         treePathInfo.push({
             name: node.name,
             dataIndex: nodeDataIndex,
diff --git a/src/chart/helper/whiskerBoxCommon.ts b/src/chart/helper/whiskerBoxCommon.ts
index b562c0d..039d1f7 100644
--- a/src/chart/helper/whiskerBoxCommon.ts
+++ b/src/chart/helper/whiskerBoxCommon.ts
@@ -60,13 +60,13 @@ class WhiskerBoxCommonMixin<Opts extends CommonOption> {
         // needed to be specified by user. Otherwise, layout can be
         // judged by which axis is category.
 
-        var ordinalMeta;
+        let ordinalMeta;
 
-        var xAxisModel = ecModel.getComponent('xAxis', this.get('xAxisIndex')) as CartesianAxisModel;
-        var yAxisModel = ecModel.getComponent('yAxis', this.get('yAxisIndex')) as CartesianAxisModel;
-        var xAxisType = xAxisModel.get('type');
-        var yAxisType = yAxisModel.get('type');
-        var addOrdinal;
+        let xAxisModel = ecModel.getComponent('xAxis', this.get('xAxisIndex')) as CartesianAxisModel;
+        let yAxisModel = ecModel.getComponent('yAxis', this.get('yAxisIndex')) as CartesianAxisModel;
+        let xAxisType = xAxisModel.get('type');
+        let yAxisType = yAxisModel.get('type');
+        let addOrdinal;
 
         // FIXME
         // Consider time axis.
@@ -85,21 +85,21 @@ class WhiskerBoxCommonMixin<Opts extends CommonOption> {
             option.layout = option.layout || 'horizontal';
         }
 
-        var coordDims = ['x', 'y'];
-        var baseAxisDimIndex = option.layout === 'horizontal' ? 0 : 1;
-        var baseAxisDim = this._baseAxisDim = coordDims[baseAxisDimIndex];
-        var otherAxisDim = coordDims[1 - baseAxisDimIndex];
-        var axisModels = [xAxisModel, yAxisModel];
-        var baseAxisType = axisModels[baseAxisDimIndex].get('type');
-        var otherAxisType = axisModels[1 - baseAxisDimIndex].get('type');
-        var data = option.data as WhiskerBoxCommonData;
+        let coordDims = ['x', 'y'];
+        let baseAxisDimIndex = option.layout === 'horizontal' ? 0 : 1;
+        let baseAxisDim = this._baseAxisDim = coordDims[baseAxisDimIndex];
+        let otherAxisDim = coordDims[1 - baseAxisDimIndex];
+        let axisModels = [xAxisModel, yAxisModel];
+        let baseAxisType = axisModels[baseAxisDimIndex].get('type');
+        let otherAxisType = axisModels[1 - baseAxisDimIndex].get('type');
+        let data = option.data as WhiskerBoxCommonData;
 
         // ??? FIXME make a stage to perform data transfrom.
         // MUST create a new data, consider setOption({}) again.
         if (data && addOrdinal) {
-            var newOptionData: WhiskerBoxCommonData = [];
+            let newOptionData: WhiskerBoxCommonData = [];
             zrUtil.each(data, function (item, index) {
-                var newItem;
+                let newItem;
                 if (zrUtil.isArray(item)) {
                     newItem = item.slice();
                     item.unshift(index);
@@ -116,8 +116,8 @@ class WhiskerBoxCommonMixin<Opts extends CommonOption> {
             option.data = newOptionData;
         }
 
-        var defaultValueDimensions = this.defaultValueDimensions;
-        var coordDimensions = [{
+        let defaultValueDimensions = this.defaultValueDimensions;
+        let coordDimensions = [{
             name: baseAxisDim,
             type: getDimensionTypeByAxis(baseAxisType),
             ordinalMeta: ordinalMeta,
@@ -149,7 +149,7 @@ class WhiskerBoxCommonMixin<Opts extends CommonOption> {
      * @override
      */
     getBaseAxis(): Axis2D {
-        var dim = this._baseAxisDim;
+        let dim = this._baseAxisDim;
         return (this.ecModel.getComponent(
             dim + 'Axis', this.get(dim + 'AxisIndex' as 'xAxisIndex' | 'yAxisIndex')
         ) as CartesianAxisModel).axis;
diff --git a/src/chart/line/LineSeries.ts b/src/chart/line/LineSeries.ts
index 2e2af7a..2f268da 100644
--- a/src/chart/line/LineSeries.ts
+++ b/src/chart/line/LineSeries.ts
@@ -105,7 +105,7 @@ class LineSeriesModel extends SeriesModel<LineSeriesOption> {
 
     getInitialData(option: LineSeriesOption): List {
         if (__DEV__) {
-            var coordSys = option.coordinateSystem;
+            let coordSys = option.coordinateSystem;
             if (coordSys !== 'polar' && coordSys !== 'cartesian2d') {
                 throw new Error('Line not support coordinateSystem besides cartesian and polar');
             }
diff --git a/src/chart/line/LineView.ts b/src/chart/line/LineView.ts
index d0dc581..0d4ef91 100644
--- a/src/chart/line/LineView.ts
+++ b/src/chart/line/LineView.ts
@@ -55,9 +55,9 @@ function isPointsSame(points1: number[][], points2: number[][]) {
     if (points1.length !== points2.length) {
         return;
     }
-    for (var i = 0; i < points1.length; i++) {
-        var p1 = points1[i];
-        var p2 = points2[i];
+    for (let i = 0; i < points1.length; i++) {
+        let p1 = points1[i];
+        let p2 = points2[i];
         if (p1[0] !== p2[0] || p1[1] !== p2[1]) {
             return;
         }
@@ -78,8 +78,8 @@ function getStackedOnPoints(
         return [];
     }
 
-    var points = [];
-    for (var idx = 0, len = data.count(); idx < len; idx++) {
+    let points = [];
+    for (let idx = 0, len = data.count(); idx < len; idx++) {
         points.push(getStackedOnPoint(dataCoordInfo, coordSys, data, idx));
     }
 
@@ -91,17 +91,17 @@ function turnPointsIntoStep(
     coordSys: Cartesian2D | Polar,
     stepTurnAt: 'start' | 'end' | 'middle'
 ) {
-    var baseAxis = coordSys.getBaseAxis();
-    var baseIndex = baseAxis.dim === 'x' || baseAxis.dim === 'radius' ? 0 : 1;
+    let baseAxis = coordSys.getBaseAxis();
+    let baseIndex = baseAxis.dim === 'x' || baseAxis.dim === 'radius' ? 0 : 1;
 
-    var stepPoints = [];
-    var i = 0;
+    let stepPoints = [];
+    let i = 0;
     for (; i < points.length - 1; i++) {
-        var nextPt = points[i + 1];
-        var pt = points[i];
+        let nextPt = points[i + 1];
+        let pt = points[i];
         stepPoints.push(pt);
 
-        var stepPt = [];
+        let stepPt = [];
         switch (stepTurnAt) {
             case 'end':
                 stepPt[baseIndex] = nextPt[baseIndex];
@@ -111,8 +111,8 @@ function turnPointsIntoStep(
                 break;
             case 'middle':
                 // default is start
-                var middle = (pt[baseIndex] + nextPt[baseIndex]) / 2;
-                var stepPt2 = [];
+                let middle = (pt[baseIndex] + nextPt[baseIndex]) / 2;
+                let stepPt2 = [];
                 stepPt[baseIndex] = stepPt2[baseIndex] = middle;
                 stepPt[1 - baseIndex] = pt[1 - baseIndex];
                 stepPt2[1 - baseIndex] = nextPt[1 - baseIndex];
@@ -135,7 +135,7 @@ function getVisualGradient(
     data: List,
     coordSys: Cartesian2D | Polar
 ) {
-    var visualMetaList = data.getVisual('visualMeta') as VisualMeta[];
+    let visualMetaList = data.getVisual('visualMeta') as VisualMeta[];
     if (!visualMetaList || !visualMetaList.length || !data.count()) {
         // When data.count() is 0, gradient range can not be calculated.
         return;
@@ -148,13 +148,13 @@ function getVisualGradient(
         return;
     }
 
-    var coordDim: 'x' | 'y';
-    var visualMeta;
+    let coordDim: 'x' | 'y';
+    let visualMeta;
 
-    for (var i = visualMetaList.length - 1; i >= 0; i--) {
-        var dimIndex = visualMetaList[i].dimension;
-        var dimName = data.dimensions[dimIndex];
-        var dimInfo = data.getDimensionInfo(dimName);
+    for (let i = visualMetaList.length - 1; i >= 0; i--) {
+        let dimIndex = visualMetaList[i].dimension;
+        let dimName = data.dimensions[dimIndex];
+        let dimInfo = data.getDimensionInfo(dimName);
         coordDim = (dimInfo && dimInfo.coordDim) as 'x' | 'y';
         // Can only be x or y
         if (coordDim === 'x' || coordDim === 'y') {
@@ -177,7 +177,7 @@ function getVisualGradient(
     // LinearGradient. So we can only infinitesimally extend area defined in
     // LinearGradient to render `outerColors`.
 
-    var axis = coordSys.getAxis(coordDim);
+    let axis = coordSys.getAxis(coordDim);
 
     interface ColorStop {
         offset: number
@@ -185,25 +185,25 @@ function getVisualGradient(
         color: ColorString
     }
     // dataToCoor mapping may not be linear, but must be monotonic.
-    var colorStops: ColorStop[] = zrUtil.map(visualMeta.stops, function (stop) {
+    let colorStops: ColorStop[] = zrUtil.map(visualMeta.stops, function (stop) {
         return {
             offset: 0,
             coord: axis.toGlobalCoord(axis.dataToCoord(stop.value)),
             color: stop.color
         };
     });
-    var stopLen = colorStops.length;
-    var outerColors = visualMeta.outerColors.slice();
+    let stopLen = colorStops.length;
+    let outerColors = visualMeta.outerColors.slice();
 
     if (stopLen && colorStops[0].coord > colorStops[stopLen - 1].coord) {
         colorStops.reverse();
         outerColors.reverse();
     }
 
-    var tinyExtent = 10; // Arbitrary value: 10px
-    var minCoord = colorStops[0].coord - tinyExtent;
-    var maxCoord = colorStops[stopLen - 1].coord + tinyExtent;
-    var coordSpan = maxCoord - minCoord;
+    let tinyExtent = 10; // Arbitrary value: 10px
+    let minCoord = colorStops[0].coord - tinyExtent;
+    let maxCoord = colorStops[stopLen - 1].coord + tinyExtent;
+    let coordSpan = maxCoord - minCoord;
 
     if (coordSpan < 1e-3) {
         return 'transparent';
@@ -226,7 +226,7 @@ function getVisualGradient(
     //     colorStop.offset = (Math.round(colorStop.offset * (end - start) + start) - start) / (end - start);
     // });
 
-    var gradient = new graphic.LinearGradient(0, 0, 0, 0, colorStops, true);
+    let gradient = new graphic.LinearGradient(0, 0, 0, 0, colorStops, true);
     gradient[coordDim] = minCoord;
     gradient[coordDim + '2' as 'x2' | 'y2'] = maxCoord;
 
@@ -238,14 +238,14 @@ function getIsIgnoreFunc(
     data: List,
     coordSys: Cartesian2D
 ) {
-    var showAllSymbol = seriesModel.get('showAllSymbol');
-    var isAuto = showAllSymbol === 'auto';
+    let showAllSymbol = seriesModel.get('showAllSymbol');
+    let isAuto = showAllSymbol === 'auto';
 
     if (showAllSymbol && !isAuto) {
         return;
     }
 
-    var categoryAxis = coordSys.getAxesByScale('ordinal')[0];
+    let categoryAxis = coordSys.getAxesByScale('ordinal')[0];
     if (!categoryAxis) {
         return;
     }
@@ -261,8 +261,8 @@ function getIsIgnoreFunc(
     }
 
     // Otherwise follow the label interval strategy on category axis.
-    var categoryDataDim = data.mapDimension(categoryAxis.dim);
-    var labelMap: Dictionary<1> = {};
+    let categoryDataDim = data.mapDimension(categoryAxis.dim);
+    let labelMap: Dictionary<1> = {};
 
     zrUtil.each(categoryAxis.getViewLabels(), function (labelItem) {
         labelMap[labelItem.tickValue] = 1;
@@ -281,14 +281,14 @@ function canShowAllSymbolForCategory(
     // is close with each other. So we check the symbol size and some of the
     // label size alone with the category axis to estimate whether all symbol
     // can be shown without overlap.
-    var axisExtent = categoryAxis.getExtent();
-    var availSize = Math.abs(axisExtent[1] - axisExtent[0]) / (categoryAxis.scale as OrdinalScale).count();
+    let axisExtent = categoryAxis.getExtent();
+    let availSize = Math.abs(axisExtent[1] - axisExtent[0]) / (categoryAxis.scale as OrdinalScale).count();
     isNaN(availSize) && (availSize = 0); // 0/0 is NaN.
 
     // Sampling some points, max 5.
-    var dataLen = data.count();
-    var step = Math.max(1, Math.round(dataLen / 5));
-    for (var dataIndex = 0; dataIndex < dataLen; dataIndex += step) {
+    let dataLen = data.count();
+    let step = Math.max(1, Math.round(dataLen / 5));
+    for (let dataIndex = 0; dataIndex < dataLen; dataIndex += step) {
         if (SymbolClz.getSymbolSize(
                 data, dataIndex
             // Only for cartesian, where `isHorizontal` exists.
@@ -309,12 +309,12 @@ function createLineClipPath(
     seriesModel: LineSeriesModel
 ) {
     if (coordSys.type === 'cartesian2d') {
-        var isHorizontal = coordSys.getBaseAxis().isHorizontal();
-        var clipPath = createGridClipPath(coordSys, hasAnimation, seriesModel);
+        let isHorizontal = coordSys.getBaseAxis().isHorizontal();
+        let clipPath = createGridClipPath(coordSys, hasAnimation, seriesModel);
         // Expand clip shape to avoid clipping when line value exceeds axis
         if (!seriesModel.get('clip', true)) {
-            var rectShape = clipPath.shape;
-            var expandSize = Math.max(rectShape.width, rectShape.height);
+            let rectShape = clipPath.shape;
+            let expandSize = Math.max(rectShape.width, rectShape.height);
             if (isHorizontal) {
                 rectShape.y -= expandSize;
                 rectShape.height += expandSize * 2;
@@ -355,9 +355,9 @@ class LineView extends ChartView {
     _data: List;
 
     init() {
-        var lineGroup = new graphic.Group();
+        let lineGroup = new graphic.Group();
 
-        var symbolDraw = new SymbolDraw();
+        let symbolDraw = new SymbolDraw();
         this.group.add(symbolDraw.group);
 
         this._symbolDraw = symbolDraw;
@@ -365,39 +365,39 @@ class LineView extends ChartView {
     }
 
     render(seriesModel: LineSeriesModel, ecModel: GlobalModel, api: ExtensionAPI) {
-        var coordSys = seriesModel.coordinateSystem;
-        var group = this.group;
-        var data = seriesModel.getData();
-        var lineStyleModel = seriesModel.getModel('lineStyle');
-        var areaStyleModel = seriesModel.getModel('areaStyle');
+        let coordSys = seriesModel.coordinateSystem;
+        let group = this.group;
+        let data = seriesModel.getData();
+        let lineStyleModel = seriesModel.getModel('lineStyle');
+        let areaStyleModel = seriesModel.getModel('areaStyle');
 
-        var points = data.mapArray(data.getItemLayout);
+        let points = data.mapArray(data.getItemLayout);
 
-        var isCoordSysPolar = coordSys.type === 'polar';
-        var prevCoordSys = this._coordSys;
+        let isCoordSysPolar = coordSys.type === 'polar';
+        let prevCoordSys = this._coordSys;
 
-        var symbolDraw = this._symbolDraw;
-        var polyline = this._polyline;
-        var polygon = this._polygon;
+        let symbolDraw = this._symbolDraw;
+        let polyline = this._polyline;
+        let polygon = this._polygon;
 
-        var lineGroup = this._lineGroup;
+        let lineGroup = this._lineGroup;
 
-        var hasAnimation = seriesModel.get('animation');
+        let hasAnimation = seriesModel.get('animation');
 
-        var isAreaChart = !areaStyleModel.isEmpty();
+        let isAreaChart = !areaStyleModel.isEmpty();
 
-        var valueOrigin = areaStyleModel.get('origin');
-        var dataCoordInfo = prepareDataCoordInfo(coordSys, data, valueOrigin);
+        let valueOrigin = areaStyleModel.get('origin');
+        let dataCoordInfo = prepareDataCoordInfo(coordSys, data, valueOrigin);
 
-        var stackedOnPoints = getStackedOnPoints(coordSys, data, dataCoordInfo);
+        let stackedOnPoints = getStackedOnPoints(coordSys, data, dataCoordInfo);
 
-        var showSymbol = seriesModel.get('showSymbol');
+        let showSymbol = seriesModel.get('showSymbol');
 
-        var isIgnoreFunc = showSymbol && !isCoordSysPolar
+        let isIgnoreFunc = showSymbol && !isCoordSysPolar
             && getIsIgnoreFunc(seriesModel, data, coordSys as Cartesian2D);
 
         // Remove temporary symbols
-        var oldData = this._data;
+        let oldData = this._data;
         oldData && oldData.eachItemGraphicEl(function (el: SymbolExtended, idx) {
             if (el.__temp) {
                 group.remove(el);
@@ -413,8 +413,8 @@ class LineView extends ChartView {
         group.add(lineGroup);
 
         // FIXME step not support polar
-        var step = !isCoordSysPolar ? seriesModel.get('step') : false;
-        var clipShapeForSymbol: PolarArea | Cartesian2DArea;
+        let step = !isCoordSysPolar ? seriesModel.get('step') : false;
+        let clipShapeForSymbol: PolarArea | Cartesian2DArea;
         if (coordSys && coordSys.getArea && seriesModel.get('clip', true)) {
             clipShapeForSymbol = coordSys.getArea();
             // Avoid float number rounding error for symbol on the edge of axis extent.
@@ -512,7 +512,7 @@ class LineView extends ChartView {
             }
         }
 
-        var visualColor = getVisualGradient(data, coordSys) || data.getVisual('color');
+        let visualColor = getVisualGradient(data, coordSys) || data.getVisual('color');
 
         polyline.useStyle(zrUtil.defaults(
             // Use color in lineStyle first
@@ -524,7 +524,7 @@ class LineView extends ChartView {
             }
         ));
 
-        var smooth = getSmooth(seriesModel.get('smooth'));
+        let smooth = getSmooth(seriesModel.get('smooth'));
         polyline.setShape({
             smooth: smooth,
             smoothMonotone: seriesModel.get('smoothMonotone'),
@@ -532,8 +532,8 @@ class LineView extends ChartView {
         });
 
         if (polygon) {
-            var stackedOnSeries = data.getCalculationInfo('stackedOnSeries');
-            var stackedOnSmooth = 0;
+            let stackedOnSeries = data.getCalculationInfo('stackedOnSeries');
+            let stackedOnSmooth = 0;
 
             polygon.useStyle(zrUtil.defaults(
                 areaStyleModel.getAreaStyle(),
@@ -573,14 +573,14 @@ class LineView extends ChartView {
         api: ExtensionAPI,
         payload: Payload
     ) {
-        var data = seriesModel.getData();
-        var dataIndex = modelUtil.queryDataIndex(data, payload);
+        let data = seriesModel.getData();
+        let dataIndex = modelUtil.queryDataIndex(data, payload);
 
         if (!(dataIndex instanceof Array) && dataIndex != null && dataIndex >= 0) {
-            var symbol = data.getItemGraphicEl(dataIndex) as SymbolClz;
+            let symbol = data.getItemGraphicEl(dataIndex) as SymbolClz;
             if (!symbol) {
                 // Create a temporary symbol if it is not exists
-                var pt = data.getItemLayout(dataIndex) as number[];
+                let pt = data.getItemLayout(dataIndex) as number[];
                 if (!pt) {
                     // Null data
                     return;
@@ -620,10 +620,10 @@ class LineView extends ChartView {
         api: ExtensionAPI,
         payload: Payload
     ) {
-        var data = seriesModel.getData();
-        var dataIndex = modelUtil.queryDataIndex(data, payload) as number;
+        let data = seriesModel.getData();
+        let dataIndex = modelUtil.queryDataIndex(data, payload) as number;
         if (dataIndex != null && dataIndex >= 0) {
-            var symbol = data.getItemGraphicEl(dataIndex) as SymbolExtended;
+            let symbol = data.getItemGraphicEl(dataIndex) as SymbolExtended;
             if (symbol) {
                 if (symbol.__temp) {
                     data.setItemGraphicEl(dataIndex, null);
@@ -645,7 +645,7 @@ class LineView extends ChartView {
     }
 
     _newPolyline(points: number[][]) {
-        var polyline = this._polyline;
+        let polyline = this._polyline;
         // Remove previous created polyline
         if (polyline) {
             this._lineGroup.remove(polyline);
@@ -667,7 +667,7 @@ class LineView extends ChartView {
     }
 
     _newPolygon(points: number[][], stackedOnPoints: number[][]) {
-        var polygon = this._polygon;
+        let polygon = this._polygon;
         // Remove previous created polygon
         if (polygon) {
             this._lineGroup.remove(polygon);
@@ -699,21 +699,21 @@ class LineView extends ChartView {
         step: LineSeriesOption['step'],
         valueOrigin: LineSeriesOption['areaStyle']['origin']
     ) {
-        var polyline = this._polyline;
-        var polygon = this._polygon;
-        var seriesModel = data.hostModel;
+        let polyline = this._polyline;
+        let polygon = this._polygon;
+        let seriesModel = data.hostModel;
 
-        var diff = lineAnimationDiff(
+        let diff = lineAnimationDiff(
             this._data, data,
             this._stackedOnPoints, stackedOnPoints,
             this._coordSys, coordSys,
             this._valueOrigin, valueOrigin
         );
 
-        var current = diff.current;
-        var stackedOnCurrent = diff.stackedOnCurrent;
-        var next = diff.next;
-        var stackedOnNext = diff.stackedOnNext;
+        let current = diff.current;
+        let stackedOnCurrent = diff.stackedOnCurrent;
+        let next = diff.next;
+        let stackedOnNext = diff.stackedOnNext;
         if (step) {
             // TODO If stacked series is not step
             current = turnPointsIntoStep(diff.current, coordSys, step);
@@ -746,16 +746,16 @@ class LineView extends ChartView {
             }, seriesModel);
         }
 
-        var updatedDataInfo: {
+        let updatedDataInfo: {
             el: SymbolExtended,
             ptIdx: number
         }[] = [];
-        var diffStatus = diff.status;
+        let diffStatus = diff.status;
 
-        for (var i = 0; i < diffStatus.length; i++) {
-            var cmd = diffStatus[i].cmd;
+        for (let i = 0; i < diffStatus.length; i++) {
+            let cmd = diffStatus[i].cmd;
             if (cmd === '=') {
-                var el = data.getItemGraphicEl(diffStatus[i].idx1) as SymbolExtended;
+                let el = data.getItemGraphicEl(diffStatus[i].idx1) as SymbolExtended;
                 if (el) {
                     updatedDataInfo.push({
                         el: el,
@@ -767,8 +767,8 @@ class LineView extends ChartView {
 
         if (polyline.animators && polyline.animators.length) {
             polyline.animators[0].during(function () {
-                for (var i = 0; i < updatedDataInfo.length; i++) {
-                    var el = updatedDataInfo[i].el;
+                for (let i = 0; i < updatedDataInfo.length; i++) {
+                    let el = updatedDataInfo[i].el;
                     el.attr('position', (polyline.shape as any).__points[updatedDataInfo[i].ptIdx]);
                 }
             });
@@ -776,8 +776,8 @@ class LineView extends ChartView {
     }
 
     remove(ecModel: GlobalModel) {
-        var group = this.group;
-        var oldData = this._data;
+        let group = this.group;
+        let oldData = this._data;
         this._lineGroup.removeAll();
         this._symbolDraw.remove(true);
         // Remove temporary created elements when highlighting
diff --git a/src/chart/line/helper.ts b/src/chart/line/helper.ts
index b298f65..916e953 100644
--- a/src/chart/line/helper.ts
+++ b/src/chart/line/helper.ts
@@ -42,22 +42,22 @@ export function prepareDataCoordInfo(
     data: List,
     valueOrigin?: LineSeriesOption['areaStyle']['origin']
 ): CoordInfo {
-    var baseAxis = coordSys.getBaseAxis();
-    var valueAxis = coordSys.getOtherAxis(baseAxis as any);
-    var valueStart = getValueStart(valueAxis, valueOrigin);
+    let baseAxis = coordSys.getBaseAxis();
+    let valueAxis = coordSys.getOtherAxis(baseAxis as any);
+    let valueStart = getValueStart(valueAxis, valueOrigin);
 
-    var baseAxisDim = baseAxis.dim;
-    var valueAxisDim = valueAxis.dim;
-    var valueDim = data.mapDimension(valueAxisDim);
-    var baseDim = data.mapDimension(baseAxisDim);
-    var baseDataOffset = valueAxisDim === 'x' || valueAxisDim === 'radius' ? 1 : 0;
+    let baseAxisDim = baseAxis.dim;
+    let valueAxisDim = valueAxis.dim;
+    let valueDim = data.mapDimension(valueAxisDim);
+    let baseDim = data.mapDimension(baseAxisDim);
+    let baseDataOffset = valueAxisDim === 'x' || valueAxisDim === 'radius' ? 1 : 0;
 
-    var dims = map(coordSys.dimensions, function (coordDim) {
+    let dims = map(coordSys.dimensions, function (coordDim) {
         return data.mapDimension(coordDim);
     });
 
-    var stacked = false;
-    var stackResultDim = data.getCalculationInfo('stackResultDimension');
+    let stacked = false;
+    let stackResultDim = data.getCalculationInfo('stackResultDimension');
     if (isDimensionStacked(data, dims[0] /*, dims[1]*/)) { // jshint ignore:line
         stacked = true;
         dims[0] = stackResultDim;
@@ -81,8 +81,8 @@ export function prepareDataCoordInfo(
 }
 
 function getValueStart(valueAxis: Axis, valueOrigin: LineSeriesOption['areaStyle']['origin']) {
-    var valueStart = 0;
-    var extent = valueAxis.scale.getExtent();
+    let valueStart = 0;
+    let extent = valueAxis.scale.getExtent();
 
     if (valueOrigin === 'start') {
         valueStart = extent[0];
@@ -112,7 +112,7 @@ export function getStackedOnPoint(
     data: List,
     idx: number
     ) {
-    var value = NaN;
+    let value = NaN;
     if (dataCoordInfo.stacked) {
         value = data.get(data.getCalculationInfo('stackedOverDimension'), idx) as number;
     }
@@ -120,8 +120,8 @@ export function getStackedOnPoint(
         value = dataCoordInfo.valueStart;
     }
 
-    var baseDataOffset = dataCoordInfo.baseDataOffset;
-    var stackedData = [];
+    let baseDataOffset = dataCoordInfo.baseDataOffset;
+    let stackedData = [];
     stackedData[baseDataOffset] = data.get(dataCoordInfo.baseDim, idx);
     stackedData[1 - baseDataOffset] = value;
 
diff --git a/src/chart/line/lineAnimationDiff.ts b/src/chart/line/lineAnimationDiff.ts
index 633afa0..f003b99 100644
--- a/src/chart/line/lineAnimationDiff.ts
+++ b/src/chart/line/lineAnimationDiff.ts
@@ -30,7 +30,7 @@ interface DiffItem {
 }
 
 function diffData(oldData: List, newData: List) {
-    var diffResult: DiffItem[] = [];
+    let diffResult: DiffItem[] = [];
 
     newData.diff(oldData)
         .add(function (idx) {
@@ -54,39 +54,39 @@ export default function (
     oldValueOrigin: LineSeriesOption['areaStyle']['origin'],
     newValueOrigin: LineSeriesOption['areaStyle']['origin']
 ) {
-    var diff = diffData(oldData, newData);
+    let diff = diffData(oldData, newData);
 
-    // var newIdList = newData.mapArray(newData.getId);
-    // var oldIdList = oldData.mapArray(oldData.getId);
+    // let newIdList = newData.mapArray(newData.getId);
+    // let oldIdList = oldData.mapArray(oldData.getId);
 
     // convertToIntId(newIdList, oldIdList);
 
     // // FIXME One data ?
     // diff = arrayDiff(oldIdList, newIdList);
 
-    var currPoints: number[][] = [];
-    var nextPoints: number[][] = [];
+    let currPoints: number[][] = [];
+    let nextPoints: number[][] = [];
     // Points for stacking base line
-    var currStackedPoints: number[][] = [];
-    var nextStackedPoints: number[][] = [];
+    let currStackedPoints: number[][] = [];
+    let nextStackedPoints: number[][] = [];
 
-    var status = [];
-    var sortedIndices: number[] = [];
-    var rawIndices: number[] = [];
+    let status = [];
+    let sortedIndices: number[] = [];
+    let rawIndices: number[] = [];
 
-    var newDataOldCoordInfo = prepareDataCoordInfo(oldCoordSys, newData, oldValueOrigin);
-    var oldDataNewCoordInfo = prepareDataCoordInfo(newCoordSys, oldData, newValueOrigin);
+    let newDataOldCoordInfo = prepareDataCoordInfo(oldCoordSys, newData, oldValueOrigin);
+    let oldDataNewCoordInfo = prepareDataCoordInfo(newCoordSys, oldData, newValueOrigin);
 
     for (let i = 0; i < diff.length; i++) {
-        var diffItem = diff[i];
-        var pointAdded = true;
+        let diffItem = diff[i];
+        let pointAdded = true;
 
         // FIXME, animation is not so perfect when dataZoom window moves fast
         // Which is in case remvoing or add more than one data in the tail or head
         switch (diffItem.cmd) {
             case '=':
-                var currentPt = oldData.getItemLayout(diffItem.idx) as number[];
-                var nextPt = newData.getItemLayout(diffItem.idx1) as number[];
+                let currentPt = oldData.getItemLayout(diffItem.idx) as number[];
+                let nextPt = newData.getItemLayout(diffItem.idx1) as number[];
                 // If previous data is NaN, use next point directly
                 if (isNaN(currentPt[0]) || isNaN(currentPt[1])) {
                     currentPt = nextPt.slice();
@@ -119,7 +119,7 @@ export default function (
                 break;
             case '-':
                 let idxMinus = diffItem.idx;
-                var rawIndex = oldData.getRawIndex(idxMinus);
+                let rawIndex = oldData.getRawIndex(idxMinus);
                 // Data is replaced. In the case of dynamic data queue
                 // FIXME FIXME FIXME
                 if (rawIndex !== idxMinus) {
@@ -154,13 +154,13 @@ export default function (
         return rawIndices[a] - rawIndices[b];
     });
 
-    var sortedCurrPoints = [];
-    var sortedNextPoints = [];
+    let sortedCurrPoints = [];
+    let sortedNextPoints = [];
 
-    var sortedCurrStackedPoints = [];
-    var sortedNextStackedPoints = [];
+    let sortedCurrStackedPoints = [];
+    let sortedNextStackedPoints = [];
 
-    var sortedStatus = [];
+    let sortedStatus = [];
     for (let i = 0; i < sortedIndices.length; i++) {
         let idx = sortedIndices[i];
         sortedCurrPoints[i] = currPoints[idx];
diff --git a/src/chart/line/poly.ts b/src/chart/line/poly.ts
index d6474f2..9b82d07 100644
--- a/src/chart/line/poly.ts
+++ b/src/chart/line/poly.ts
@@ -23,16 +23,16 @@ import Path, { PathProps } from 'zrender/src/graphic/Path';
 import * as vec2 from 'zrender/src/core/vector';
 import fixClipWithShadow from 'zrender/src/graphic/helper/fixClipWithShadow';
 
-var vec2Min = vec2.min;
-var vec2Max = vec2.max;
+const vec2Min = vec2.min;
+const vec2Max = vec2.max;
 
-var scaleAndAdd = vec2.scaleAndAdd;
-var v2Copy = vec2.copy;
+const scaleAndAdd = vec2.scaleAndAdd;
+const v2Copy = vec2.copy;
 
 // Temporary variable
-var v: number[] = [];
-var cp0: number[] = [];
-var cp1: number[] = [];
+const v: number[] = [];
+const cp0: number[] = [];
+const cp1: number[] = [];
 
 function isPointNull(p: number[]) {
     return isNaN(p[0]) || isNaN(p[1]);
@@ -82,11 +82,11 @@ function drawSegment(
 //         return true;
 //     }
 
-//     var dim = smoothMonotone === 'x' ? 0 : 1;
-//     var last = points[0][dim];
-//     var lastDiff = 0;
-//     for (var i = 1; i < points.length; ++i) {
-//         var diff = points[i][dim] - last;
+//     let dim = smoothMonotone === 'x' ? 0 : 1;
+//     let last = points[0][dim];
+//     let lastDiff = 0;
+//     for (let i = 1; i < points.length; ++i) {
+//         let diff = points[i][dim] - last;
 //         if (!isNaN(diff) && !isNaN(lastDiff)
 //             && diff !== 0 && lastDiff !== 0
 //             && ((diff >= 0) !== (lastDiff >= 0))
@@ -119,11 +119,11 @@ function drawMono(
     smoothMonotone: 'x' | 'y' | 'none',
     connectNulls: boolean
 ) {
-    var prevIdx = 0;
-    var idx = start;
-    var k = 0;
+    let prevIdx = 0;
+    let idx = start;
+    let k = 0;
     for (; k < segLen; k++) {
-        var p = points[idx];
+        let p = points[idx];
         if (idx >= allLen || idx < 0) {
             break;
         }
@@ -140,11 +140,11 @@ function drawMono(
         }
         else {
             if (smooth > 0) {
-                var prevP = points[prevIdx];
-                var dim = smoothMonotone === 'y' ? 1 : 0;
+                let prevP = points[prevIdx];
+                let dim = smoothMonotone === 'y' ? 1 : 0;
 
                 // Length of control point to p, either in x or y, but not both
-                var ctrlLen = (p[dim] - prevP[dim]) * smooth;
+                let ctrlLen = (p[dim] - prevP[dim]) * smooth;
 
                 v2Copy(cp0, prevP);
                 cp0[dim] = prevP[dim] + ctrlLen;
@@ -188,11 +188,11 @@ function drawNonMono(
     smoothMonotone: 'x' | 'y' | 'none',
     connectNulls: boolean
 ) {
-    var prevIdx = 0;
-    var idx = start;
-    var k = 0;
+    let prevIdx = 0;
+    let idx = start;
+    let k = 0;
     for (; k < segLen; k++) {
-        var p = points[idx];
+        let p = points[idx];
         if (idx >= allLen || idx < 0) {
             break;
         }
@@ -210,8 +210,8 @@ function drawNonMono(
         }
         else {
             if (smooth > 0) {
-                var nextIdx = idx + dir;
-                var nextP = points[nextIdx];
+                let nextIdx = idx + dir;
+                let nextP = points[nextIdx];
                 if (connectNulls) {
                     // Find next point not null
                     while (nextP && isPointNull(points[nextIdx])) {
@@ -220,8 +220,8 @@ function drawNonMono(
                     }
                 }
 
-                var ratioNextSeg = 0.5;
-                var prevP = points[prevIdx];
+                let ratioNextSeg = 0.5;
+                let prevP = points[prevIdx];
                 nextP = points[nextIdx];
                 // Last point
                 if (!nextP || isPointNull(nextP)) {
@@ -235,10 +235,10 @@ function drawNonMono(
 
                     vec2.sub(v, nextP, prevP);
 
-                    var lenPrevSeg;
-                    var lenNextSeg;
+                    let lenPrevSeg;
+                    let lenNextSeg;
                     if (smoothMonotone === 'x' || smoothMonotone === 'y') {
-                        var dim = smoothMonotone === 'x' ? 0 : 1;
+                        let dim = smoothMonotone === 'x' ? 0 : 1;
                         lenPrevSeg = Math.abs(p[dim] - prevP[dim]);
                         lenNextSeg = Math.abs(p[dim] - nextP[dim]);
                     }
@@ -279,11 +279,11 @@ function drawNonMono(
 }
 
 function getBoundingBox(points: number[][], smoothConstraint?: boolean) {
-    var ptMin = [Infinity, Infinity];
-    var ptMax = [-Infinity, -Infinity];
+    let ptMin = [Infinity, Infinity];
+    let ptMax = [-Infinity, -Infinity];
     if (smoothConstraint) {
-        for (var i = 0; i < points.length; i++) {
-            var pt = points[i];
+        for (let i = 0; i < points.length; i++) {
+            let pt = points[i];
             if (pt[0] < ptMin[0]) {
                 ptMin[0] = pt[0];
             }
@@ -332,12 +332,12 @@ export class ECPolyline extends Path<ECPolylineProps> {
     }
 
     buildPath(ctx: CanvasRenderingContext2D, shape: ECPolylineShape) {
-        var points = shape.points;
+        let points = shape.points;
 
-        var i = 0;
-        var len = points.length;
+        let i = 0;
+        let len = points.length;
 
-        var result = getBoundingBox(points, shape.smoothConstraint);
+        let result = getBoundingBox(points, shape.smoothConstraint);
 
         if (shape.connectNulls) {
             // Must remove first and last null values avoid draw error in polygon
@@ -383,14 +383,14 @@ export class ECPolygon extends Path {
         super(opts, null, new ECPolygonShape());
     }
     buildPath(ctx: CanvasRenderingContext2D, shape: ECPolygonShape) {
-        var points = shape.points;
-        var stackedOnPoints = shape.stackedOnPoints;
+        let points = shape.points;
+        let stackedOnPoints = shape.stackedOnPoints;
 
-        var i = 0;
-        var len = points.length;
-        var smoothMonotone = shape.smoothMonotone;
-        var bbox = getBoundingBox(points, shape.smoothConstraint);
-        var stackedOnBBox = getBoundingBox(stackedOnPoints, shape.smoothConstraint);
+        let i = 0;
+        let len = points.length;
+        let smoothMonotone = shape.smoothMonotone;
+        let bbox = getBoundingBox(points, shape.smoothConstraint);
+        let stackedOnBBox = getBoundingBox(stackedOnPoints, shape.smoothConstraint);
 
         if (shape.connectNulls) {
             // Must remove first and last null values avoid draw error in polygon
@@ -406,7 +406,7 @@ export class ECPolygon extends Path {
             }
         }
         while (i < len) {
-            var k = drawSegment(
+            let k = drawSegment(
                 ctx, points, i, len, len,
                 1, bbox.min, bbox.max, shape.smooth,
                 smoothMonotone, shape.connectNulls
diff --git a/src/chart/lines/LinesSeries.ts b/src/chart/lines/LinesSeries.ts
index f030902..785aeb9 100644
--- a/src/chart/lines/LinesSeries.ts
+++ b/src/chart/lines/LinesSeries.ts
@@ -39,21 +39,21 @@ import {
 import GlobalModel from '../../model/Global';
 import type { LineDrawModelOption } from '../helper/LineDraw';
 
-var Uint32Arr = typeof Uint32Array === 'undefined' ? Array : Uint32Array;
-var Float64Arr = typeof Float64Array === 'undefined' ? Array : Float64Array;
+const Uint32Arr = typeof Uint32Array === 'undefined' ? Array : Uint32Array;
+const Float64Arr = typeof Float64Array === 'undefined' ? Array : Float64Array;
 
 function compatEc2(seriesOpt: LinesSeriesOption) {
-    var data = seriesOpt.data;
+    let data = seriesOpt.data;
     if (data && data[0] && (data as LegacyDataItemOption[][])[0][0] && (data as LegacyDataItemOption[][])[0][0].coord) {
         if (__DEV__) {
             console.warn('Lines data configuration has been changed to'
                 + ' { coords:[[1,2],[2,3]] }');
         }
         seriesOpt.data = map(data as LegacyDataItemOption[][], function (itemOpt) {
-            var coords = [
+            let coords = [
                 itemOpt[0].coord, itemOpt[1].coord
             ];
-            var target: LinesDataItemOption = {
+            let target: LinesDataItemOption = {
                 coords: coords
             };
             if (itemOpt[0].name) {
@@ -161,7 +161,7 @@ class LinesSeriesModel extends SeriesModel<LinesSeriesOption> {
         // Not using preprocessor because mergeOption may not have series.type
         compatEc2(option);
 
-        var result = this._processFlatCoordsArray(option.data);
+        let result = this._processFlatCoordsArray(option.data);
         this._flatCoords = result.flatCoords;
         this._flatCoordsOffset = result.flatCoordsOffset;
         if (result.flatCoords) {
@@ -179,7 +179,7 @@ class LinesSeriesModel extends SeriesModel<LinesSeriesOption> {
 
         if (option.data) {
             // Only update when have option data to merge.
-            var result = this._processFlatCoordsArray(option.data);
+            let result = this._processFlatCoordsArray(option.data);
             this._flatCoords = result.flatCoords;
             this._flatCoordsOffset = result.flatCoordsOffset;
             if (result.flatCoords) {
@@ -191,7 +191,7 @@ class LinesSeriesModel extends SeriesModel<LinesSeriesOption> {
     }
 
     appendData(params: Pick<LinesSeriesOption, 'data'>) {
-        var result = this._processFlatCoordsArray(params.data);
+        let result = this._processFlatCoordsArray(params.data);
         if (result.flatCoords) {
             if (!this._flatCoords) {
                 this._flatCoords = result.flatCoords;
@@ -208,8 +208,8 @@ class LinesSeriesModel extends SeriesModel<LinesSeriesOption> {
     }
 
     _getCoordsFromItemModel(idx: number) {
-        var itemModel = this.getData().getItemModel<LinesDataItemOption>(idx);
-        var coords = (itemModel.option instanceof Array)
+        let itemModel = this.getData().getItemModel<LinesDataItemOption>(idx);
+        let coords = (itemModel.option instanceof Array)
             ? itemModel.option : itemModel.getShallow('coords');
 
         if (__DEV__) {
@@ -233,8 +233,8 @@ class LinesSeriesModel extends SeriesModel<LinesSeriesOption> {
 
     getLineCoords(idx: number, out: number[][]) {
         if (this._flatCoordsOffset) {
-            var offset = this._flatCoordsOffset[idx * 2];
-            var len = this._flatCoordsOffset[idx * 2 + 1];
+            let offset = this._flatCoordsOffset[idx * 2];
+            let len = this._flatCoordsOffset[idx * 2 + 1];
             for (let i = 0; i < len; i++) {
                 out[i] = out[i] || [];
                 out[i][0] = this._flatCoords[offset + i * 2];
@@ -243,7 +243,7 @@ class LinesSeriesModel extends SeriesModel<LinesSeriesOption> {
             return len;
         }
         else {
-            var coords = this._getCoordsFromItemModel(idx);
+            let coords = this._getCoordsFromItemModel(idx);
             for (let i = 0; i < coords.length; i++) {
                 out[i] = out[i] || [];
                 out[i][0] = coords[i][0];
@@ -254,30 +254,30 @@ class LinesSeriesModel extends SeriesModel<LinesSeriesOption> {
     }
 
     _processFlatCoordsArray(data: LinesSeriesOption['data']) {
-        var startOffset = 0;
+        let startOffset = 0;
         if (this._flatCoords) {
             startOffset = this._flatCoords.length;
         }
         // Stored as a typed array. In format
         // Points Count(2) | x | y | x | y | Points Count(3) | x |  y | x | y | x | y |
         if (typeof data[0] === 'number') {
-            var len = data.length;
+            let len = data.length;
             // Store offset and len of each segment
-            var coordsOffsetAndLenStorage = new Uint32Arr(len) as Uint32Array;
-            var coordsStorage = new Float64Arr(len) as Float64Array;
-            var coordsCursor = 0;
-            var offsetCursor = 0;
-            var dataCount = 0;
-            for (var i = 0; i < len;) {
+            let coordsOffsetAndLenStorage = new Uint32Arr(len) as Uint32Array;
+            let coordsStorage = new Float64Arr(len) as Float64Array;
+            let coordsCursor = 0;
+            let offsetCursor = 0;
+            let dataCount = 0;
+            for (let i = 0; i < len;) {
                 dataCount++;
-                var count = data[i++] as number;
+                let count = data[i++] as number;
                 // Offset
                 coordsOffsetAndLenStorage[offsetCursor++] = coordsCursor + startOffset;
                 // Len
                 coordsOffsetAndLenStorage[offsetCursor++] = count;
-                for (var k = 0; k < count; k++) {
-                    var x = data[i++] as number;
-                    var y = data[i++] as number;
+                for (let k = 0; k < count; k++) {
+                    let x = data[i++] as number;
+                    let y = data[i++] as number;
                     coordsStorage[coordsCursor++] = x;
                     coordsStorage[coordsCursor++] = y;
 
@@ -305,13 +305,13 @@ class LinesSeriesModel extends SeriesModel<LinesSeriesOption> {
 
     getInitialData(option: LinesSeriesOption, ecModel: GlobalModel) {
         if (__DEV__) {
-            var CoordSys = CoordinateSystem.get(option.coordinateSystem);
+            let CoordSys = CoordinateSystem.get(option.coordinateSystem);
             if (!CoordSys) {
                 throw new Error('Unkown coordinate system ' + option.coordinateSystem);
             }
         }
 
-        var lineData = new List(['value'], this);
+        let lineData = new List(['value'], this);
         lineData.hasItemOption = false;
 
         lineData.initData(option.data, [], function (dataItem, dimName, dataIndex, dimIndex) {
@@ -321,7 +321,7 @@ class LinesSeriesModel extends SeriesModel<LinesSeriesOption> {
             }
             else {
                 lineData.hasItemOption = true;
-                var value = dataItem.value;
+                let value = dataItem.value;
                 if (value != null) {
                     return value instanceof Array ? value[dimIndex] : value;
                 }
@@ -332,15 +332,15 @@ class LinesSeriesModel extends SeriesModel<LinesSeriesOption> {
     }
 
     formatTooltip(dataIndex: number) {
-        var data = this.getData();
-        var itemModel = data.getItemModel<LinesDataItemOption>(dataIndex);
-        var name = itemModel.get('name');
+        let data = this.getData();
+        let itemModel = data.getItemModel<LinesDataItemOption>(dataIndex);
+        let name = itemModel.get('name');
         if (name) {
             return name;
         }
-        var fromName = itemModel.get('fromName');
-        var toName = itemModel.get('toName');
-        var html = [];
+        let fromName = itemModel.get('fromName');
+        let toName = itemModel.get('toName');
+        let html = [];
         fromName != null && html.push(fromName);
         toName != null && html.push(toName);
 
@@ -352,7 +352,7 @@ class LinesSeriesModel extends SeriesModel<LinesSeriesOption> {
     }
 
     getProgressive() {
-        var progressive = this.option.progressive;
+        let progressive = this.option.progressive;
         if (progressive == null) {
             return this.option.large ? 1e4 : this.get('progressive');
         }
@@ -360,7 +360,7 @@ class LinesSeriesModel extends SeriesModel<LinesSeriesOption> {
     }
 
     getProgressiveThreshold() {
-        var progressiveThreshold = this.option.progressiveThreshold;
+        let progressiveThreshold = this.option.progressiveThreshold;
         if (progressiveThreshold == null) {
             return this.option.large ? 2e4 : this.get('progressiveThreshold');
         }
diff --git a/src/chart/lines/LinesView.ts b/src/chart/lines/LinesView.ts
index 034bb26..378b95d 100644
--- a/src/chart/lines/LinesView.ts
+++ b/src/chart/lines/LinesView.ts
@@ -51,18 +51,18 @@ class LinesView extends ChartView {
     private _isLargeDraw: boolean;
 
     render(seriesModel: LinesSeriesModel, ecModel: GlobalModel, api: ExtensionAPI) {
-        var data = seriesModel.getData();
+        let data = seriesModel.getData();
 
-        var lineDraw = this._updateLineDraw(data, seriesModel);
+        let lineDraw = this._updateLineDraw(data, seriesModel);
 
-        var zlevel = seriesModel.get('zlevel');
-        var trailLength = seriesModel.get(['effect', 'trailLength']);
+        let zlevel = seriesModel.get('zlevel');
+        let trailLength = seriesModel.get(['effect', 'trailLength']);
 
-        var zr = api.getZr();
+        let zr = api.getZr();
         // Avoid the drag cause ghost shadow
         // FIXME Better way ?
         // SVG doesn't support
-        var isSvg = zr.painter.getType() === 'svg';
+        let isSvg = zr.painter.getType() === 'svg';
         if (!isSvg) {
             (zr.painter as CanvasPainter).getLayer(zlevel).clear(true);
         }
@@ -74,7 +74,7 @@ class LinesView extends ChartView {
         }
         if (this._showEffect(seriesModel) && trailLength) {
             if (__DEV__) {
-                var notInIndividual = false;
+                let notInIndividual = false;
                 ecModel.eachSeries(function (otherSeriesModel) {
                     if (otherSeriesModel !== seriesModel && otherSeriesModel.get('zlevel') === zlevel) {
                         notInIndividual = true;
@@ -93,7 +93,7 @@ class LinesView extends ChartView {
 
         lineDraw.updateData(data as List);
 
-        var clipPath = seriesModel.get('clip', true) && createClipPath(
+        let clipPath = seriesModel.get('clip', true) && createClipPath(
             (seriesModel.coordinateSystem as Polar | Cartesian2D), false, seriesModel
         );
         if (clipPath) {
@@ -109,9 +109,9 @@ class LinesView extends ChartView {
     }
 
     incrementalPrepareRender(seriesModel: LinesSeriesModel, ecModel: GlobalModel, api: ExtensionAPI) {
-        var data = seriesModel.getData();
+        let data = seriesModel.getData();
 
-        var lineDraw = this._updateLineDraw(data, seriesModel);
+        let lineDraw = this._updateLineDraw(data, seriesModel);
 
         lineDraw.incrementalPrepareUpdate(data);
 
@@ -131,8 +131,8 @@ class LinesView extends ChartView {
     }
 
     updateTransform(seriesModel: LinesSeriesModel, ecModel: GlobalModel, api: ExtensionAPI) {
-        var data = seriesModel.getData();
-        var pipelineContext = seriesModel.pipelineContext;
+        let data = seriesModel.getData();
+        let pipelineContext = seriesModel.pipelineContext;
 
         if (!this._finished || pipelineContext.large || pipelineContext.progressiveRender) {
             // TODO Don't have to do update in large mode. Only do it when there are millions of data.
@@ -143,7 +143,7 @@ class LinesView extends ChartView {
         else {
             // TODO Use same logic with ScatterView.
             // Manually update layout
-            var res = linesLayout.reset(seriesModel, ecModel, api) as StageHandlerProgressExecutor;
+            let res = linesLayout.reset(seriesModel, ecModel, api) as StageHandlerProgressExecutor;
             if (res.progress) {
                 res.progress({
                     start: 0,
@@ -158,11 +158,11 @@ class LinesView extends ChartView {
     }
 
     _updateLineDraw(data: List, seriesModel: LinesSeriesModel) {
-        var lineDraw = this._lineDraw;
-        var hasEffect = this._showEffect(seriesModel);
-        var isPolyline = !!seriesModel.get('polyline');
-        var pipelineContext = seriesModel.pipelineContext;
-        var isLargeDraw = pipelineContext.large;
+        let lineDraw = this._lineDraw;
+        let hasEffect = this._showEffect(seriesModel);
+        let isPolyline = !!seriesModel.get('polyline');
+        let pipelineContext = seriesModel.pipelineContext;
+        let isLargeDraw = pipelineContext.large;
 
         if (__DEV__) {
             if (hasEffect && isLargeDraw) {
@@ -201,8 +201,8 @@ class LinesView extends ChartView {
 
     _clearLayer(api: ExtensionAPI) {
         // Not use motion when dragging or zooming
-        var zr = api.getZr();
-        var isSvg = zr.painter.getType() === 'svg';
+        let zr = api.getZr();
+        let isSvg = zr.painter.getType() === 'svg';
         if (!isSvg && this._lastZlevel != null) {
             (zr.painter as CanvasPainter).getLayer(this._lastZlevel).clear(true);
         }
diff --git a/src/chart/lines/linesLayout.ts b/src/chart/lines/linesLayout.ts
index 8c70588..fcba67f 100644
--- a/src/chart/lines/linesLayout.ts
+++ b/src/chart/lines/linesLayout.ts
@@ -29,17 +29,17 @@ const linesLayout: StageHandler = {
     plan: createRenderPlanner(),
 
     reset: function (seriesModel: LinesSeriesModel) {
-        var coordSys = seriesModel.coordinateSystem;
-        var isPolyline = seriesModel.get('polyline');
-        var isLarge = seriesModel.pipelineContext.large;
+        let coordSys = seriesModel.coordinateSystem;
+        let isPolyline = seriesModel.get('polyline');
+        let isLarge = seriesModel.pipelineContext.large;
         return {
             progress(params, lineData) {
-                var lineCoords: number[][] = [];
+                let lineCoords: number[][] = [];
                 if (isLarge) {
-                    var points;
-                    var segCount = params.end - params.start;
+                    let points;
+                    let segCount = params.end - params.start;
                     if (isPolyline) {
-                        var totalCoordsCount = 0;
+                        let totalCoordsCount = 0;
                         for (let i = params.start; i < params.end; i++) {
                             totalCoordsCount += seriesModel.getLineCoordsCount(i);
                         }
@@ -49,14 +49,14 @@ const linesLayout: StageHandler = {
                         points = new Float32Array(segCount * 4);
                     }
 
-                    var offset = 0;
-                    var pt: number[] = [];
+                    let offset = 0;
+                    let pt: number[] = [];
                     for (let i = params.start; i < params.end; i++) {
                         let len = seriesModel.getLineCoords(i, lineCoords);
                         if (isPolyline) {
                             points[offset++] = len;
                         }
-                        for (var k = 0; k < len; k++) {
+                        for (let k = 0; k < len; k++) {
                             pt = coordSys.dataToPoint(lineCoords[k], false, pt);
                             points[offset++] = pt[0];
                             points[offset++] = pt[1];
@@ -67,12 +67,12 @@ const linesLayout: StageHandler = {
                 }
                 else {
                     for (let i = params.start; i < params.end; i++) {
-                        var itemModel = lineData.getItemModel<LinesDataItemOption>(i);
+                        let itemModel = lineData.getItemModel<LinesDataItemOption>(i);
                         let len = seriesModel.getLineCoords(i, lineCoords);
 
-                        var pts = [];
+                        let pts = [];
                         if (isPolyline) {
-                            for (var j = 0; j < len; j++) {
+                            for (let j = 0; j < len; j++) {
                                 pts.push(coordSys.dataToPoint(lineCoords[j]));
                             }
                         }
@@ -80,7 +80,7 @@ const linesLayout: StageHandler = {
                             pts[0] = coordSys.dataToPoint(lineCoords[0]);
                             pts[1] = coordSys.dataToPoint(lineCoords[1]);
 
-                            var curveness = itemModel.get(['lineStyle', 'curveness']);
+                            let curveness = itemModel.get(['lineStyle', 'curveness']);
                             if (+curveness) {
                                 pts[2] = [
                                     (pts[0][0] + pts[1][0]) / 2 - (pts[0][1] - pts[1][1]) * curveness,
diff --git a/src/chart/lines/linesVisual.ts b/src/chart/lines/linesVisual.ts
index 9c0f08e..5882909 100644
--- a/src/chart/lines/linesVisual.ts
+++ b/src/chart/lines/linesVisual.ts
@@ -31,14 +31,14 @@ function normalize(a: string | number | (string | number)[]): (string | number)[
     return a;
 }
 
-var opacityQuery = ['lineStyle', 'opacity'] as const;
+const opacityQuery = ['lineStyle', 'opacity'] as const;
 
 const linesVisual: StageHandler = {
     seriesType: 'lines',
     reset(seriesModel: LinesSeriesModel) {
-        var symbolType = normalize(seriesModel.get('symbol'));
-        var symbolSize = normalize(seriesModel.get('symbolSize'));
-        var data = seriesModel.getData();
+        let symbolType = normalize(seriesModel.get('symbol'));
+        let symbolSize = normalize(seriesModel.get('symbolSize'));
+        let data = seriesModel.getData();
 
         data.setVisual('fromSymbol', symbolType && symbolType[0]);
         data.setVisual('toSymbol', symbolType && symbolType[1]);
@@ -47,10 +47,10 @@ const linesVisual: StageHandler = {
         data.setVisual('opacity', seriesModel.get(opacityQuery));
 
         function dataEach(data: List<LinesSeriesModel>, idx: number): void {
-            var itemModel = data.getItemModel(idx) as Model<LinesDataItemOption>;
-            var symbolType = normalize(itemModel.getShallow('symbol', true));
-            var symbolSize = normalize(itemModel.getShallow('symbolSize', true));
-            var opacity = itemModel.get(opacityQuery);
+            let itemModel = data.getItemModel(idx) as Model<LinesDataItemOption>;
+            let symbolType = normalize(itemModel.getShallow('symbol', true));
+            let symbolSize = normalize(itemModel.getShallow('symbolSize', true));
+            let opacity = itemModel.get(opacityQuery);
 
             symbolType[0] && data.setItemVisual(idx, 'fromSymbol', symbolType[0]);
             symbolType[1] && data.setItemVisual(idx, 'toSymbol', symbolType[1]);
diff --git a/src/chart/map/MapSeries.ts b/src/chart/map/MapSeries.ts
index bacf2a3..d461f1d 100644
--- a/src/chart/map/MapSeries.ts
+++ b/src/chart/map/MapSeries.ts
@@ -122,17 +122,17 @@ class MapSeries extends SeriesModel<MapSeriesOption> {
 
 
     getInitialData(option: MapSeriesOption): List {
-        var data = createListSimply(this, {
+        let data = createListSimply(this, {
             coordDimensions: ['value'],
             encodeDefaulter: zrUtil.curry(makeSeriesEncodeForNameBased, this)
         });
-        var valueDim = data.mapDimension('value');
-        var dataNameMap = zrUtil.createHashMap();
-        var selectTargetList = [];
-        var toAppendNames = [] as string[];
+        let valueDim = data.mapDimension('value');
+        let dataNameMap = zrUtil.createHashMap();
+        let selectTargetList = [];
+        let toAppendNames = [] as string[];
 
-        for (var i = 0, len = data.count(); i < len; i++) {
-            var name = data.getName(i);
+        for (let i = 0, len = data.count(); i < len; i++) {
+            let name = data.getName(i);
             dataNameMap.set(name, true);
             selectTargetList.push({
                 name: name,
@@ -141,9 +141,9 @@ class MapSeries extends SeriesModel<MapSeriesOption> {
             });
         }
 
-        var geoSource = geoSourceManager.load(this.getMapType(), this.option.nameMap);
+        let geoSource = geoSourceManager.load(this.getMapType(), this.option.nameMap);
         zrUtil.each(geoSource.regions, function (region) {
-            var name = region.name;
+            let name = region.name;
             if (!dataNameMap.get(name)) {
                 selectTargetList.push({name: name});
                 toAppendNames.push(name);
@@ -165,7 +165,7 @@ class MapSeries extends SeriesModel<MapSeriesOption> {
      * inner exclusive geo model.
      */
     getHostGeoModel(): GeoModel {
-        var geoIndex = this.option.geoIndex;
+        let geoIndex = this.option.geoIndex;
         return geoIndex != null
             ? this.dependentModels.geo[geoIndex] as GeoModel
             : null;
@@ -187,7 +187,7 @@ class MapSeries extends SeriesModel<MapSeriesOption> {
     getRawValue(dataIndex: number): ParsedValue {
         // Use value stored in data instead because it is calculated from multiple series
         // FIXME Provide all value of multiple series ?
-        var data = this.getData();
+        let data = this.getData();
         return data.get(data.mapDimension('value'), dataIndex);
     }
 
@@ -195,7 +195,7 @@ class MapSeries extends SeriesModel<MapSeriesOption> {
      * Get model of region
      */
     getRegionModel(regionName: string): Model<MapDataItemOption> {
-        var data = this.getData();
+        let data = this.getData();
         return data.getItemModel(data.indexOfName(regionName));
     }
 
@@ -204,15 +204,15 @@ class MapSeries extends SeriesModel<MapSeriesOption> {
      */
     formatTooltip(dataIndex: number): string {
         // FIXME orignalData and data is a bit confusing
-        var data = this.getData();
-        var formattedValue = addCommas(this.getRawValue(dataIndex));
-        var name = data.getName(dataIndex);
-
-        var seriesGroup = this.seriesGroup;
-        var seriesNames = [];
-        for (var i = 0; i < seriesGroup.length; i++) {
-            var otherIndex = seriesGroup[i].originalData.indexOfName(name);
-            var valueDim = data.mapDimension('value');
+        let data = this.getData();
+        let formattedValue = addCommas(this.getRawValue(dataIndex));
+        let name = data.getName(dataIndex);
+
+        let seriesGroup = this.seriesGroup;
+        let seriesNames = [];
+        for (let i = 0; i < seriesGroup.length; i++) {
+            let otherIndex = seriesGroup[i].originalData.indexOfName(name);
+            let valueDim = data.mapDimension('value');
             if (!isNaN(seriesGroup[i].originalData.get(valueDim, otherIndex) as number)) {
                 seriesNames.push(
                     encodeHTML(seriesGroup[i].name)
@@ -226,9 +226,9 @@ class MapSeries extends SeriesModel<MapSeriesOption> {
 
     getTooltipPosition = function (this: MapSeries, dataIndex: number): number[] {
         if (dataIndex != null) {
-            var name = this.getData().getName(dataIndex);
-            var geo = this.coordinateSystem;
-            var region = geo.getRegion(name);
+            let name = this.getData().getName(dataIndex);
+            let geo = this.coordinateSystem;
+            let region = geo.getRegion(name);
 
             return region && geo.dataToPoint(region.center);
         }
diff --git a/src/chart/map/MapView.ts b/src/chart/map/MapView.ts
index 47a1a64..f6eab85 100644
--- a/src/chart/map/MapView.ts
+++ b/src/chart/map/MapView.ts
@@ -29,9 +29,9 @@ import { Payload } from '../../util/types';
 import Model from '../../model/Model';
 
 
-var HIGH_DOWN_PROP = '__seriesMapHighDown' as const;
-var RECORD_VERSION_PROP = '__seriesMapCallKey' as const;
-var ORIGINAL_Z2 = '__mapOriginalZ2' as const;
+const HIGH_DOWN_PROP = '__seriesMapHighDown' as const;
+const RECORD_VERSION_PROP = '__seriesMapCallKey' as const;
+const ORIGINAL_Z2 = '__mapOriginalZ2' as const;
 
 interface CircleExtend extends graphic.Circle {
     [ORIGINAL_Z2]: number;
@@ -69,7 +69,7 @@ class MapView extends ChartView {
             return;
         }
 
-        var group = this.group;
+        let group = this.group;
         group.removeAll();
 
         if (mapModel.getHostGeoModel()) {
@@ -117,25 +117,25 @@ class MapView extends ChartView {
     }
 
     private _renderSymbols(mapModel: MapSeries, ecModel: GlobalModel, api: ExtensionAPI): void {
-        var originalData = mapModel.originalData;
-        var group = this.group;
+        let originalData = mapModel.originalData;
+        let group = this.group;
 
         originalData.each(originalData.mapDimension('value'), function (value, originalDataIndex) {
             if (isNaN(value as number)) {
                 return;
             }
 
-            var layout = originalData.getItemLayout(originalDataIndex);
+            let layout = originalData.getItemLayout(originalDataIndex);
 
             if (!layout || !layout.point) {
                 // Not exists in map
                 return;
             }
 
-            var point = layout.point;
-            var offset = layout.offset;
+            let point = layout.point;
+            let offset = layout.offset;
 
-            var circle = new graphic.Circle({
+            let circle = new graphic.Circle({
                 style: {
                     // Because the special of map draw.
                     // Which needs statistic of multiple series and draw on one map.
@@ -165,16 +165,16 @@ class MapView extends ChartView {
             // settings on series `X` but render label `C` by the settings on series `Y`.
             if (!offset) {
 
-                var fullData = mapModel.mainSeries.getData();
-                var name = originalData.getName(originalDataIndex);
+                let fullData = mapModel.mainSeries.getData();
+                let name = originalData.getName(originalDataIndex);
 
-                var fullIndex = fullData.indexOfName(name);
+                let fullIndex = fullData.indexOfName(name);
 
-                var itemModel = originalData.getItemModel<MapDataItemOption>(originalDataIndex);
-                var labelModel = itemModel.getModel('label');
-                var hoverLabelModel = itemModel.getModel(['emphasis', 'label']);
+                let itemModel = originalData.getItemModel<MapDataItemOption>(originalDataIndex);
+                let labelModel = itemModel.getModel('label');
+                let hoverLabelModel = itemModel.getModel(['emphasis', 'label']);
 
-                var regionGroup = fullData.getItemGraphicEl(fullIndex) as RegionGroupExtend;
+                let regionGroup = fullData.getItemGraphicEl(fullIndex) as RegionGroupExtend;
 
                 // `getFormattedLabel` needs to use `getData` inside. Here
                 // `mapModel.getData()` is shallow cloned from `mainSeries.getData()`.
@@ -183,23 +183,23 @@ class MapView extends ChartView {
                 // set on original data item will never get. But it has been working
                 // like that from the begining, and this scenario is rarely encountered.
                 // So it won't be fixed until have to.
-                var normalText = zrUtil.retrieve2(
+                let normalText = zrUtil.retrieve2(
                     mapModel.getFormattedLabel(fullIndex, 'normal'),
                     name
                 );
-                var emphasisText = zrUtil.retrieve2(
+                let emphasisText = zrUtil.retrieve2(
                     mapModel.getFormattedLabel(fullIndex, 'emphasis'),
                     normalText
                 );
 
-                var highDownRecord = regionGroup[HIGH_DOWN_PROP];
-                var recordVersion = Math.random();
+                let highDownRecord = regionGroup[HIGH_DOWN_PROP];
+                let recordVersion = Math.random();
 
                 // Prevent from register listeners duplicatedly when roaming.
                 if (!highDownRecord) {
                     highDownRecord = regionGroup[HIGH_DOWN_PROP] = {} as HighDownRecord;
-                    var onEmphasis = zrUtil.curry(onRegionHighDown, true);
-                    var onNormal = zrUtil.curry(onRegionHighDown, false);
+                    let onEmphasis = zrUtil.curry(onRegionHighDown, true);
+                    let onNormal = zrUtil.curry(onRegionHighDown, false);
                     regionGroup.on('mouseover', onEmphasis)
                         .on('mouseout', onNormal)
                         .on('emphasis', onEmphasis)
@@ -228,18 +228,18 @@ class MapView extends ChartView {
 }
 
 function onRegionHighDown(this: RegionGroupExtend, toHighOrDown: boolean): void {
-    var highDownRecord = this[HIGH_DOWN_PROP];
+    let highDownRecord = this[HIGH_DOWN_PROP];
     if (highDownRecord && highDownRecord.recordVersion === this[RECORD_VERSION_PROP]) {
         enterRegionHighDown(highDownRecord, toHighOrDown);
     }
 }
 
 function enterRegionHighDown(highDownRecord: HighDownRecord, toHighOrDown: boolean): void {
-    var circle = highDownRecord.circle;
-    var labelModel = highDownRecord.labelModel;
-    var hoverLabelModel = highDownRecord.hoverLabelModel;
-    var emphasisText = highDownRecord.emphasisText;
-    var normalText = highDownRecord.normalText;
+    let circle = highDownRecord.circle;
+    let labelModel = highDownRecord.labelModel;
+    let hoverLabelModel = highDownRecord.hoverLabelModel;
+    let emphasisText = highDownRecord.emphasisText;
+    let normalText = highDownRecord.normalText;
 
     if (toHighOrDown) {
         circle.style.extendFrom(
diff --git a/src/chart/map/backwardCompat.ts b/src/chart/map/backwardCompat.ts
index 1c450a0..e31a192 100644
--- a/src/chart/map/backwardCompat.ts
+++ b/src/chart/map/backwardCompat.ts
@@ -22,7 +22,7 @@ import { ECUnitOption, SeriesOption } from '../../util/types';
 
 export default function (option: ECUnitOption) {
     // Save geoCoord
-    var mapSeries = [];
+    let mapSeries = [];
     zrUtil.each(option.series, function (seriesOpt: SeriesOption) {
         if (seriesOpt && seriesOpt.type === 'map') {
             mapSeries.push(seriesOpt);
diff --git a/src/chart/map/mapDataStatistic.ts b/src/chart/map/mapDataStatistic.ts
index 678295f..fb70a38 100644
--- a/src/chart/map/mapDataStatistic.ts
+++ b/src/chart/map/mapDataStatistic.ts
@@ -25,12 +25,12 @@ import GlobalModel from '../../model/Global';
 
 // FIXME 公用?
 function dataStatistics(datas: List[], statisticType: MapValueCalculationType): List {
-    var dataNameMap = {} as {[mapKey: string]: number[]};
+    let dataNameMap = {} as {[mapKey: string]: number[]};
 
     zrUtil.each(datas, function (data) {
         data.each(data.mapDimension('value'), function (value: number, idx) {
             // Add prefix to avoid conflict with Object.prototype.
-            var mapKey = 'ec-' + data.getName(idx);
+            let mapKey = 'ec-' + data.getName(idx);
             dataNameMap[mapKey] = dataNameMap[mapKey] || [];
             if (!isNaN(value)) {
                 dataNameMap[mapKey].push(value);
@@ -39,17 +39,17 @@ function dataStatistics(datas: List[], statisticType: MapValueCalculationType):
     });
 
     return datas[0].map(datas[0].mapDimension('value'), function (value, idx) {
-        var mapKey = 'ec-' + datas[0].getName(idx);
-        var sum = 0;
-        var min = Infinity;
-        var max = -Infinity;
-        var len = dataNameMap[mapKey].length;
-        for (var i = 0; i < len; i++) {
+        let mapKey = 'ec-' + datas[0].getName(idx);
+        let sum = 0;
+        let min = Infinity;
+        let max = -Infinity;
+        let len = dataNameMap[mapKey].length;
+        for (let i = 0; i < len; i++) {
             min = Math.min(min, dataNameMap[mapKey][i]);
             max = Math.max(max, dataNameMap[mapKey][i]);
             sum += dataNameMap[mapKey][i];
         }
-        var result;
+        let result;
         if (statisticType === 'min') {
             result = min;
         }
@@ -67,15 +67,15 @@ function dataStatistics(datas: List[], statisticType: MapValueCalculationType):
 }
 
 export default function (ecModel: GlobalModel): void {
-    var seriesGroups = {} as {[key: string]: MapSeries[]};
+    let seriesGroups = {} as {[key: string]: MapSeries[]};
     ecModel.eachSeriesByType('map', function (seriesModel: MapSeries) {
-        var hostGeoModel = seriesModel.getHostGeoModel();
-        var key = hostGeoModel ? 'o' + hostGeoModel.id : 'i' + seriesModel.getMapType();
+        let hostGeoModel = seriesModel.getHostGeoModel();
+        let key = hostGeoModel ? 'o' + hostGeoModel.id : 'i' + seriesModel.getMapType();
         (seriesGroups[key] = seriesGroups[key] || []).push(seriesModel);
     });
 
     zrUtil.each(seriesGroups, function (seriesList, key) {
-        var data = dataStatistics(
+        let data = dataStatistics(
             zrUtil.map(seriesList, function (seriesModel) {
                 return seriesModel.getData();
             }),
diff --git a/src/chart/map/mapSymbolLayout.ts b/src/chart/map/mapSymbolLayout.ts
index b3a4475..56f3003 100644
--- a/src/chart/map/mapSymbolLayout.ts
+++ b/src/chart/map/mapSymbolLayout.ts
@@ -25,23 +25,23 @@ import { Dictionary } from '../../util/types';
 
 export default function (ecModel: GlobalModel) {
 
-    var processedMapType = {} as {[mapType: string]: boolean};
+    let processedMapType = {} as {[mapType: string]: boolean};
 
     ecModel.eachSeriesByType('map', function (mapSeries: MapSeries) {
-        var mapType = mapSeries.getMapType();
+        let mapType = mapSeries.getMapType();
         if (mapSeries.getHostGeoModel() || processedMapType[mapType]) {
             return;
         }
 
-        var mapSymbolOffsets = {} as Dictionary<number>;
+        let mapSymbolOffsets = {} as Dictionary<number>;
 
         zrUtil.each(mapSeries.seriesGroup, function (subMapSeries) {
-            var geo = subMapSeries.coordinateSystem;
-            var data = subMapSeries.originalData;
+            let geo = subMapSeries.coordinateSystem;
+            let data = subMapSeries.originalData;
             if (subMapSeries.get('showLegendSymbol') && ecModel.getComponent('legend')) {
                 data.each(data.mapDimension('value'), function (value, idx) {
-                    var name = data.getName(idx);
-                    var region = geo.getRegion(name);
+                    let name = data.getName(idx);
+                    let region = geo.getRegion(name);
 
                     // If input series.data is [11, 22, '-'/null/undefined, 44],
                     // it will be filled with NaN: [11, 22, NaN, 44] and NaN will
@@ -50,9 +50,9 @@ export default function (ecModel: GlobalModel) {
                         return;
                     }
 
-                    var offset = mapSymbolOffsets[name] || 0;
+                    let offset = mapSymbolOffsets[name] || 0;
 
-                    var point = geo.dataToPoint(region.center);
+                    let point = geo.dataToPoint(region.center);
 
                     mapSymbolOffsets[name] = offset + 1;
 
@@ -65,10 +65,10 @@ export default function (ecModel: GlobalModel) {
         });
 
         // Show label of those region not has legendSymbol(which is offset 0)
-        var data = mapSeries.getData();
+        let data = mapSeries.getData();
         data.each(function (idx) {
-            var name = data.getName(idx);
-            var layout = data.getItemLayout(idx) || {};
+            let name = data.getName(idx);
+            let layout = data.getItemLayout(idx) || {};
             layout.showLabel = !mapSymbolOffsets[name];
             data.setItemLayout(idx, layout);
         });
diff --git a/src/chart/map/mapVisual.ts b/src/chart/map/mapVisual.ts
index 617f729..461a3c7 100644
--- a/src/chart/map/mapVisual.ts
+++ b/src/chart/map/mapVisual.ts
@@ -24,11 +24,11 @@ import { ZRColor } from '../../util/types';
 
 export default function (ecModel: GlobalModel) {
     ecModel.eachSeriesByType('map', function (seriesModel: MapSeries) {
-        var colorList = seriesModel.get('color') as ZRColor[];
-        var itemStyleModel = seriesModel.getModel('itemStyle');
+        let colorList = seriesModel.get('color') as ZRColor[];
+        let itemStyleModel = seriesModel.getModel('itemStyle');
 
-        var areaColor = itemStyleModel.get('areaColor');
-        var color = itemStyleModel.get('color')
+        let areaColor = itemStyleModel.get('areaColor');
+        let color = itemStyleModel.get('color')
             || colorList[seriesModel.seriesIndex % colorList.length];
 
         seriesModel.getData().setVisual({
diff --git a/src/chart/parallel/ParallelSeries.ts b/src/chart/parallel/ParallelSeries.ts
index 62192a6..3254757 100644
--- a/src/chart/parallel/ParallelSeries.ts
+++ b/src/chart/parallel/ParallelSeries.ts
@@ -91,7 +91,7 @@ class ParallelSeriesModel extends SeriesModel<ParallelSeriesOption> {
 
 
     getInitialData(option: ParallelSeriesOption, ecModel: GlobalModel): List {
-        var source = this.getSource();
+        let source = this.getSource();
 
         setEncodeAndDimensions(source, this);
 
@@ -104,9 +104,9 @@ class ParallelSeriesModel extends SeriesModel<ParallelSeriesOption> {
      * @return Raw indices
      */
     getRawIndicesByActiveState(activeState: ParallelActiveState): number[] {
-        var coordSys = this.coordinateSystem;
-        var data = this.getData();
-        var indices = [] as number[];
+        let coordSys = this.coordinateSystem;
+        let data = this.getData();
+        let indices = [] as number[];
 
         coordSys.eachActiveState(data, function (theActiveState, dataIndex) {
             if (activeState === theActiveState) {
@@ -164,16 +164,16 @@ function setEncodeAndDimensions(source: Source, seriesModel: ParallelSeriesModel
         return;
     }
 
-    var parallelModel = seriesModel.ecModel.getComponent(
+    let parallelModel = seriesModel.ecModel.getComponent(
         'parallel', seriesModel.get('parallelIndex')
     ) as ParallelModel;
     if (!parallelModel) {
         return;
     }
 
-    var encodeDefine = source.encodeDefine = createHashMap();
+    let encodeDefine = source.encodeDefine = createHashMap();
     each(parallelModel.dimensions, function (axisDim) {
-        var dataDimIndex = convertDimNameToNumber(axisDim);
+        let dataDimIndex = convertDimNameToNumber(axisDim);
         encodeDefine.set(axisDim, dataDimIndex);
     });
 }
diff --git a/src/chart/parallel/ParallelView.ts b/src/chart/parallel/ParallelView.ts
index 71fe51c..03a8ff9 100644
--- a/src/chart/parallel/ParallelView.ts
+++ b/src/chart/parallel/ParallelView.ts
@@ -59,12 +59,12 @@ class ParallelView extends ChartView {
             animation?: boolean
         }
     ) {
-        var dataGroup = this._dataGroup;
-        var data = seriesModel.getData();
-        var oldData = this._data;
-        var coordSys = seriesModel.coordinateSystem;
-        var dimensions = coordSys.dimensions;
-        var seriesScope = makeSeriesScope(seriesModel);
+        let dataGroup = this._dataGroup;
+        let data = seriesModel.getData();
+        let oldData = this._data;
+        let coordSys = seriesModel.coordinateSystem;
+        let dimensions = coordSys.dimensions;
+        let seriesScope = makeSeriesScope(seriesModel);
 
         data.diff(oldData)
             .add(add)
@@ -73,29 +73,29 @@ class ParallelView extends ChartView {
             .execute();
 
         function add(newDataIndex: number) {
-            var line = addEl(data, dataGroup, newDataIndex, dimensions, coordSys);
+            let line = addEl(data, dataGroup, newDataIndex, dimensions, coordSys);
             updateElCommon(line, data, newDataIndex, seriesScope);
         }
 
         function update(newDataIndex: number, oldDataIndex: number) {
-            var line = oldData.getItemGraphicEl(oldDataIndex) as graphic.Polyline;
-            var points = createLinePoints(data, newDataIndex, dimensions, coordSys);
+            let line = oldData.getItemGraphicEl(oldDataIndex) as graphic.Polyline;
+            let points = createLinePoints(data, newDataIndex, dimensions, coordSys);
             data.setItemGraphicEl(newDataIndex, line);
-            var animationModel = (payload && payload.animation === false) ? null : seriesModel;
+            let animationModel = (payload && payload.animation === false) ? null : seriesModel;
             graphic.updateProps(line, {shape: {points: points}}, animationModel, newDataIndex);
 
             updateElCommon(line, data, newDataIndex, seriesScope);
         }
 
         function remove(oldDataIndex: number) {
-            var line = oldData.getItemGraphicEl(oldDataIndex);
+            let line = oldData.getItemGraphicEl(oldDataIndex);
             dataGroup.remove(line);
         }
 
         // First create
         if (!this._initialized) {
             this._initialized = true;
-            var clipPath = createGridClipShape(
+            let clipPath = createGridClipShape(
                 coordSys, seriesModel, function () {
                     // Callback will be invoked immediately if there is no animation
                     setTimeout(function () {
@@ -116,13 +116,13 @@ class ParallelView extends ChartView {
     }
 
     incrementalRender(taskParams: StageHandlerProgressParams, seriesModel: ParallelSeriesModel, ecModel: GlobalModel) {
-        var data = seriesModel.getData();
-        var coordSys = seriesModel.coordinateSystem;
-        var dimensions = coordSys.dimensions;
-        var seriesScope = makeSeriesScope(seriesModel);
+        let data = seriesModel.getData();
+        let coordSys = seriesModel.coordinateSystem;
+        let dimensions = coordSys.dimensions;
+        let seriesScope = makeSeriesScope(seriesModel);
 
-        for (var dataIndex = taskParams.start; dataIndex < taskParams.end; dataIndex++) {
-            var line = addEl(data, this._dataGroup, dataIndex, dimensions, coordSys);
+        for (let dataIndex = taskParams.start; dataIndex < taskParams.end; dataIndex++) {
+            let line = addEl(data, this._dataGroup, dataIndex, dimensions, coordSys);
             line.incremental = true;
             updateElCommon(line, data, dataIndex, seriesScope);
         }
@@ -138,9 +138,9 @@ class ParallelView extends ChartView {
 }
 
 function createGridClipShape(coordSys: Parallel, seriesModel: ParallelSeriesModel, cb: () => void) {
-    var parallelModel = coordSys.model;
-    var rect = coordSys.getRect();
-    var rectEl = new graphic.Rect({
+    let parallelModel = coordSys.model;
+    let rect = coordSys.getRect();
+    let rectEl = new graphic.Rect({
         shape: {
             x: rect.x,
             y: rect.y,
@@ -149,7 +149,7 @@ function createGridClipShape(coordSys: Parallel, seriesModel: ParallelSeriesMode
         }
     });
 
-    var dim = parallelModel.get('layout') === 'horizontal' ? 'width' : 'height';
+    let dim = parallelModel.get('layout') === 'horizontal' ? 'width' : 'height';
     rectEl.setShape(dim, 0);
     graphic.initProps(rectEl, {
         shape: {
@@ -161,10 +161,10 @@ function createGridClipShape(coordSys: Parallel, seriesModel: ParallelSeriesMode
 }
 
 function createLinePoints(data: List, dataIndex: number, dimensions: string[], coordSys: Parallel) {
-    var points = [];
-    for (var i = 0; i < dimensions.length; i++) {
-        var dimName = dimensions[i];
-        var value = data.get(data.mapDimension(dimName), dataIndex);
+    let points = [];
+    for (let i = 0; i < dimensions.length; i++) {
+        let dimName = dimensions[i];
+        let value = data.get(data.mapDimension(dimName), dataIndex);
         if (!isEmptyValue(value, coordSys.getAxis(dimName).type)) {
             points.push(coordSys.dataToPoint(value, dimName));
         }
@@ -173,8 +173,8 @@ function createLinePoints(data: List, dataIndex: number, dimensions: string[], c
 }
 
 function addEl(data: List, dataGroup: graphic.Group, dataIndex: number, dimensions: string[], coordSys: Parallel) {
-    var points = createLinePoints(data, dataIndex, dimensions, coordSys);
-    var line = new graphic.Polyline({
+    let points = createLinePoints(data, dataIndex, dimensions, coordSys);
+    let line = new graphic.Polyline({
         shape: {points: points},
         silent: true,
         z2: 10
@@ -185,7 +185,7 @@ function addEl(data: List, dataGroup: graphic.Group, dataIndex: number, dimensio
 }
 
 function makeSeriesScope(seriesModel: ParallelSeriesModel): ParallelDrawSeriesScope {
-    var smooth = seriesModel.get('smooth', true);
+    let smooth = seriesModel.get('smooth', true);
     smooth === true && (smooth = DEFAULT_SMOOTH);
 
     return {
@@ -200,17 +200,17 @@ function updateElCommon(
     dataIndex: number,
     seriesScope: ParallelDrawSeriesScope
 ) {
-    var lineStyle = seriesScope.lineStyle;
+    let lineStyle = seriesScope.lineStyle;
 
     if (data.hasItemOption) {
-        var lineStyleModel = data.getItemModel<ParallelSeriesDataItemOption>(dataIndex)
+        let lineStyleModel = data.getItemModel<ParallelSeriesDataItemOption>(dataIndex)
             .getModel('lineStyle');
         lineStyle = lineStyleModel.getLineStyle();
     }
 
     el.useStyle(lineStyle);
 
-    var elStyle = el.style;
+    let elStyle = el.style;
     elStyle.fill = null;
     // lineStyle.color have been set to itemVisual in module:echarts/visual/seriesColor.
     elStyle.stroke = data.getItemVisual(dataIndex, 'color');
@@ -221,7 +221,7 @@ function updateElCommon(
 }
 
 // function simpleDiff(oldData, newData, dimensions) {
-//     var oldLen;
+//     let oldLen;
 //     if (!oldData
 //         || !oldData.__plProgressive
 //         || (oldLen = oldData.count()) !== newData.count()
@@ -229,9 +229,9 @@ function updateElCommon(
 //         return true;
 //     }
 
-//     var dimLen = dimensions.length;
-//     for (var i = 0; i < oldLen; i++) {
-//         for (var j = 0; j < dimLen; j++) {
+//     let dimLen = dimensions.length;
+//     for (let i = 0; i < oldLen; i++) {
+//         for (let j = 0; j < dimLen; j++) {
 //             if (oldData.get(dimensions[j], i) !== newData.get(dimensions[j], i)) {
 //                 return true;
 //             }
diff --git a/src/chart/parallel/parallelVisual.ts b/src/chart/parallel/parallelVisual.ts
index e20f75d..4b20b39 100644
--- a/src/chart/parallel/parallelVisual.ts
+++ b/src/chart/parallel/parallelVisual.ts
@@ -22,29 +22,29 @@ import ParallelSeriesModel, { ParallelSeriesOption } from './ParallelSeries';
 import { StageHandler } from '../../util/types';
 
 
-var opacityAccessPath = ['lineStyle', 'opacity'] as const;
+const opacityAccessPath = ['lineStyle', 'opacity'] as const;
 
-var parallelVisual: StageHandler = {
+const parallelVisual: StageHandler = {
 
     seriesType: 'parallel',
 
     reset: function (seriesModel: ParallelSeriesModel, ecModel) {
 
-        // var itemStyleModel = seriesModel.getModel('itemStyle');
-        var lineStyleModel = seriesModel.getModel('lineStyle');
-        var globalColors = ecModel.get('color');
+        // let itemStyleModel = seriesModel.getModel('itemStyle');
+        let lineStyleModel = seriesModel.getModel('lineStyle');
+        let globalColors = ecModel.get('color');
 
-        var color = lineStyleModel.get('color')
+        let color = lineStyleModel.get('color')
             // || itemStyleModel.get('color')
             || globalColors[seriesModel.seriesIndex % globalColors.length];
-        var inactiveOpacity = seriesModel.get('inactiveOpacity');
-        var activeOpacity = seriesModel.get('activeOpacity');
-        var lineStyle = seriesModel.getModel('lineStyle').getLineStyle();
+        let inactiveOpacity = seriesModel.get('inactiveOpacity');
+        let activeOpacity = seriesModel.get('activeOpacity');
+        let lineStyle = seriesModel.getModel('lineStyle').getLineStyle();
 
-        var coordSys = seriesModel.coordinateSystem;
-        var data = seriesModel.getData();
+        let coordSys = seriesModel.coordinateSystem;
+        let data = seriesModel.getData();
 
-        var opacityMap = {
+        let opacityMap = {
             normal: lineStyle.opacity,
             active: activeOpacity,
             inactive: inactiveOpacity
@@ -55,9 +55,9 @@ var parallelVisual: StageHandler = {
         return {
             progress(params, data) {
                 coordSys.eachActiveState(data, function (activeState, dataIndex) {
-                    var opacity = opacityMap[activeState];
+                    let opacity = opacityMap[activeState];
                     if (activeState === 'normal' && data.hasItemOption) {
-                        var itemOpacity = data.getItemModel<ParallelSeriesOption>(dataIndex).get(
+                        let itemOpacity = data.getItemModel<ParallelSeriesOption>(dataIndex).get(
                             opacityAccessPath, true
                         );
                         itemOpacity != null && (opacity = itemOpacity);
diff --git a/src/chart/pie/PieSeries.ts b/src/chart/pie/PieSeries.ts
index a3f4767..c409e7a 100644
--- a/src/chart/pie/PieSeries.ts
+++ b/src/chart/pie/PieSeries.ts
@@ -147,10 +147,10 @@ class PieSeriesModel extends SeriesModel<PieSeriesOption> {
     }
 
     private _createSelectableList(): SelectableTarget[] {
-        var data = this.getRawData();
-        var valueDim = data.mapDimension('value');
-        var targetList = [];
-        for (var i = 0, len = data.count(); i < len; i++) {
+        let data = this.getRawData();
+        let valueDim = data.mapDimension('value');
+        let targetList = [];
+        for (let i = 0, len = data.count(); i < len; i++) {
             targetList.push({
                 name: data.getName(i),
                 value: data.get(valueDim, i),
@@ -164,11 +164,11 @@ class PieSeriesModel extends SeriesModel<PieSeriesOption> {
      * @overwrite
      */
     getDataParams(dataIndex: number): CallbackDataParams {
-        var data = this.getData();
-        var params = super.getDataParams(dataIndex);
+        let data = this.getData();
+        let params = super.getDataParams(dataIndex);
         // FIXME toFixed?
 
-        var valueList: number[] = [];
+        let valueList: number[] = [];
         data.each(data.mapDimension('value'), function (value: number) {
             valueList.push(value);
         });
@@ -187,8 +187,8 @@ class PieSeriesModel extends SeriesModel<PieSeriesOption> {
         // Extend labelLine emphasis
         modelUtil.defaultEmphasis(option, 'labelLine', ['show']);
 
-        var labelLineNormalOpt = option.labelLine;
-        var labelLineEmphasisOpt = option.emphasis.labelLine;
+        let labelLineNormalOpt = option.labelLine;
+        let labelLineEmphasisOpt = option.emphasis.labelLine;
         // Not show label line if `label.normal.show = false`
         labelLineNormalOpt.show = labelLineNormalOpt.show
             && option.label.show;
diff --git a/src/chart/pie/PieView.ts b/src/chart/pie/PieView.ts
index 1828fa1..159b937 100644
--- a/src/chart/pie/PieView.ts
+++ b/src/chart/pie/PieView.ts
@@ -38,10 +38,10 @@ function updateDataSelected(
     hasAnimation: boolean,
     api: ExtensionAPI
 ): void {
-    var data = seriesModel.getData();
-    var dataIndex = graphic.getECData(this).dataIndex;
-    var name = data.getName(dataIndex);
-    var selectedOffset = seriesModel.get('selectedOffset');
+    let data = seriesModel.getData();
+    let dataIndex = graphic.getECData(this).dataIndex;
+    let name = data.getName(dataIndex);
+    let selectedOffset = seriesModel.get('selectedOffset');
 
     api.dispatchAction({
         type: 'pieToggleSelect',
@@ -68,13 +68,13 @@ function toggleItemSelected(
     selectedOffset: number,
     hasAnimation: boolean
 ): void {
-    var midAngle = (layout.startAngle + layout.endAngle) / 2;
+    let midAngle = (layout.startAngle + layout.endAngle) / 2;
 
-    var dx = Math.cos(midAngle);
-    var dy = Math.sin(midAngle);
+    let dx = Math.cos(midAngle);
+    let dy = Math.sin(midAngle);
 
-    var offset = isSelected ? selectedOffset : 0;
-    var position = [dx * offset, dy * offset];
+    let offset = isSelected ? selectedOffset : 0;
+    let position = [dx * offset, dy * offset];
 
     hasAnimation
         // animateTo will stop revious animation like update transition
@@ -99,11 +99,11 @@ class PiePiece extends graphic.Group {
     constructor(data: List, idx: number) {
         super();
 
-        var sector = new graphic.Sector({
+        let sector = new graphic.Sector({
             z2: 2
         });
-        var polyline = new graphic.Polyline();
-        var text = new graphic.Text();
+        let polyline = new graphic.Polyline();
+        let text = new graphic.Text();
         this.add(sector);
         this.add(polyline);
         this.add(text);
@@ -112,25 +112,25 @@ class PiePiece extends graphic.Group {
     }
 
     updateData(data: List, idx: number, firstCreate?: boolean): void {
-        var sector = this.childAt(0) as graphic.Sector;
-        var labelLine = this.childAt(1) as PieceElementExtension;
-        var labelText = this.childAt(2) as PieceElementExtension;
-
-        var seriesModel = data.hostModel as PieSeriesModel;
-        var itemModel = data.getItemModel<PieDataItemOption>(idx);
-        var layout = data.getItemLayout(idx) as graphic.Sector['shape'];
-        var sectorShape = zrUtil.extend({
+        let sector = this.childAt(0) as graphic.Sector;
+        let labelLine = this.childAt(1) as PieceElementExtension;
+        let labelText = this.childAt(2) as PieceElementExtension;
+
+        let seriesModel = data.hostModel as PieSeriesModel;
+        let itemModel = data.getItemModel<PieDataItemOption>(idx);
+        let layout = data.getItemLayout(idx) as graphic.Sector['shape'];
+        let sectorShape = zrUtil.extend({
             label: null
         }, layout);
         // Not animate label
         sectorShape.label = null;
 
-        var animationTypeUpdate = seriesModel.getShallow('animationTypeUpdate');
+        let animationTypeUpdate = seriesModel.getShallow('animationTypeUpdate');
 
         if (firstCreate) {
             sector.setShape(sectorShape);
 
-            var animationType = seriesModel.getShallow('animationType');
+            let animationType = seriesModel.getShallow('animationType');
             if (animationType === 'scale') {
                 sector.shape.r = layout.r0;
                 graphic.initProps(sector, {
@@ -164,7 +164,7 @@ class PiePiece extends graphic.Group {
         }
 
         // Update common style
-        var visualColor = data.getItemVisual(idx, 'color');
+        let visualColor = data.getItemVisual(idx, 'color');
 
         sector.useStyle(
             zrUtil.defaults(
@@ -177,7 +177,7 @@ class PiePiece extends graphic.Group {
         );
         sector.hoverStyle = itemModel.getModel(['emphasis', 'itemStyle']).getItemStyle();
 
-        var cursorStyle = itemModel.getShallow('cursor');
+        let cursorStyle = itemModel.getShallow('cursor');
         cursorStyle && sector.attr('cursor', cursorStyle);
 
         // Toggle selected
@@ -190,7 +190,7 @@ class PiePiece extends graphic.Group {
         );
 
         // Label and text animation should be applied only for transition type animation when update
-        var withAnimation = !firstCreate && animationTypeUpdate === 'transition';
+        let withAnimation = !firstCreate && animationTypeUpdate === 'transition';
         this._updateLabel(data, idx, withAnimation);
 
         (this as ECElement).highDownOnUpdate = (itemModel.get('hoverAnimation') && seriesModel.isAnimationEnabled())
@@ -227,14 +227,14 @@ class PiePiece extends graphic.Group {
 
     private _updateLabel(data: List, idx: number, withAnimation: boolean): void {
 
-        var labelLine = this.childAt(1) as (PieceElementExtension & graphic.Polyline);
-        var labelText = this.childAt(2) as (PieceElementExtension & graphic.Text);
+        let labelLine = this.childAt(1) as (PieceElementExtension & graphic.Polyline);
+        let labelText = this.childAt(2) as (PieceElementExtension & graphic.Text);
 
-        var seriesModel = data.hostModel;
-        var itemModel = data.getItemModel<PieDataItemOption>(idx);
-        var layout = data.getItemLayout(idx);
-        var labelLayout = layout.label;
-        // var visualColor = data.getItemVisual(idx, 'color');
+        let seriesModel = data.hostModel;
+        let itemModel = data.getItemModel<PieDataItemOption>(idx);
+        let layout = data.getItemLayout(idx);
+        let labelLayout = layout.label;
+        // let visualColor = data.getItemVisual(idx, 'color');
 
         if (!labelLayout || isNaN(labelLayout.x) || isNaN(labelLayout.y)) {
             labelText.ignore = labelText.normalIgnore = labelText.hoverIgnore =
@@ -242,14 +242,14 @@ class PiePiece extends graphic.Group {
             return;
         }
 
-        var targetLineShape: {
+        let targetLineShape: {
             points: number[][]
         } = {
             points: labelLayout.linePoints || [
                 [labelLayout.x, labelLayout.y], [labelLayout.x, labelLayout.y], [labelLayout.x, labelLayout.y]
             ]
         };
-        var targetTextStyle = {
+        let targetTextStyle = {
             x: labelLayout.x,
             y: labelLayout.y
         };
@@ -277,11 +277,11 @@ class PiePiece extends graphic.Group {
             z2: 10
         });
 
-        var labelModel = itemModel.getModel('label');
-        var labelHoverModel = itemModel.getModel(['emphasis', 'label']);
-        var labelLineModel = itemModel.getModel('labelLine');
-        var labelLineHoverModel = itemModel.getModel(['emphasis', 'labelLine']);
-        var visualColor = data.getItemVisual(idx, 'color');
+        let labelModel = itemModel.getModel('label');
+        let labelHoverModel = itemModel.getModel(['emphasis', 'label']);
+        let labelLineModel = itemModel.getModel('labelLine');
+        let labelLineHoverModel = itemModel.getModel(['emphasis', 'labelLine']);
+        let visualColor = data.getItemVisual(idx, 'color');
 
         graphic.setLabelStyle(
             labelText.style,
@@ -317,7 +317,7 @@ class PiePiece extends graphic.Group {
 
         labelLine.hoverStyle = labelLineHoverModel.getModel('lineStyle').getLineStyle();
 
-        var smooth = labelLineModel.get('smooth');
+        let smooth = labelLineModel.get('smooth');
         if (smooth && smooth === true) {
             smooth = 0.4;
         }
@@ -337,7 +337,7 @@ class PieView extends ChartView {
     private _data: List;
 
     init(): void {
-        var sectorGroup = new graphic.Group();
+        let sectorGroup = new graphic.Group();
         this._sectorGroup = sectorGroup;
     }
 
@@ -346,23 +346,23 @@ class PieView extends ChartView {
             return;
         }
 
-        var data = seriesModel.getData();
-        var oldData = this._data;
-        var group = this.group;
+        let data = seriesModel.getData();
+        let oldData = this._data;
+        let group = this.group;
 
-        var hasAnimation = ecModel.get('animation');
-        var isFirstRender = !oldData;
-        var animationType = seriesModel.get('animationType');
-        var animationTypeUpdate = seriesModel.get('animationTypeUpdate');
+        let hasAnimation = ecModel.get('animation');
+        let isFirstRender = !oldData;
+        let animationType = seriesModel.get('animationType');
+        let animationTypeUpdate = seriesModel.get('animationTypeUpdate');
 
-        var onSectorClick = zrUtil.curry(
+        let onSectorClick = zrUtil.curry(
             updateDataSelected, this.uid, seriesModel, hasAnimation, api
         );
 
-        var selectedMode = seriesModel.get('selectedMode');
+        let selectedMode = seriesModel.get('selectedMode');
         data.diff(oldData)
             .add(function (idx) {
-                var piePiece = new PiePiece(data, idx);
+                let piePiece = new PiePiece(data, idx);
                 // Default expansion animation
                 if (isFirstRender && animationType !== 'scale') {
                     piePiece.eachChild(function (child) {
@@ -377,7 +377,7 @@ class PieView extends ChartView {
                 group.add(piePiece);
             })
             .update(function (newIdx, oldIdx) {
-                var piePiece = oldData.getItemGraphicEl(oldIdx) as PiePiece;
+                let piePiece = oldData.getItemGraphicEl(oldIdx) as PiePiece;
 
                 if (!isFirstRender && animationTypeUpdate !== 'transition') {
                     piePiece.eachChild(function (child) {
@@ -393,7 +393,7 @@ class PieView extends ChartView {
                 data.setItemGraphicEl(newIdx, piePiece);
             })
             .remove(function (idx) {
-                var piePiece = oldData.getItemGraphicEl(idx);
+                let piePiece = oldData.getItemGraphicEl(idx);
                 group.remove(piePiece);
             })
             .execute();
@@ -402,14 +402,14 @@ class PieView extends ChartView {
             hasAnimation && data.count() > 0
             && (isFirstRender ? animationType !== 'scale' : animationTypeUpdate !== 'transition')
         ) {
-            var shape = data.getItemLayout(0);
-            for (var s = 1; isNaN(shape.startAngle) && s < data.count(); ++s) {
+            let shape = data.getItemLayout(0);
+            for (let s = 1; isNaN(shape.startAngle) && s < data.count(); ++s) {
                 shape = data.getItemLayout(s);
             }
 
-            var r = Math.max(api.getWidth(), api.getHeight()) / 2;
+            let r = Math.max(api.getWidth(), api.getHeight()) / 2;
 
-            var removeClipPath = zrUtil.bind(group.removeClipPath, group);
+            let removeClipPath = zrUtil.bind(group.removeClipPath, group);
             group.setClipPath(this._createClipPath(
                 shape.cx, shape.cy, r, shape.startAngle, shape.clockwise, removeClipPath, seriesModel, isFirstRender
             ));
@@ -431,7 +431,7 @@ class PieView extends ChartView {
         cb,
         seriesModel: PieSeriesModel, isFirstRender: boolean
     ): graphic.Sector {
-        var clipPath = new graphic.Sector({
+        let clipPath = new graphic.Sector({
             shape: {
                 cx: cx,
                 cy: cy,
@@ -443,7 +443,7 @@ class PieView extends ChartView {
             }
         });
 
-        var initOrUpdate = isFirstRender ? graphic.initProps : graphic.updateProps;
+        let initOrUpdate = isFirstRender ? graphic.initProps : graphic.updateProps;
         initOrUpdate(clipPath, {
             shape: {
                 endAngle: startAngle + (clockwise ? 1 : -1) * Math.PI * 2
@@ -454,12 +454,12 @@ class PieView extends ChartView {
     }
 
     containPoint(point: number[], seriesModel: PieSeriesModel): boolean {
-        var data = seriesModel.getData();
-        var itemLayout = data.getItemLayout(0);
+        let data = seriesModel.getData();
+        let itemLayout = data.getItemLayout(0);
         if (itemLayout) {
-            var dx = point[0] - itemLayout.cx;
-            var dy = point[1] - itemLayout.cy;
-            var radius = Math.sqrt(dx * dx + dy * dy);
+            let dx = point[0] - itemLayout.cx;
+            let dy = point[1] - itemLayout.cy;
+            let radius = Math.sqrt(dx * dx + dy * dy);
             return radius <= itemLayout.r && radius >= itemLayout.r0;
         }
     }
diff --git a/src/chart/pie/labelLayout.ts b/src/chart/pie/labelLayout.ts
index 81c5fa1..8ded15b 100644
--- a/src/chart/pie/labelLayout.ts
+++ b/src/chart/pie/labelLayout.ts
@@ -25,7 +25,7 @@ import PieSeriesModel, { PieSeriesOption, PieDataItemOption } from './PieSeries'
 import { VectorArray } from 'zrender/src/core/vector';
 import { HorizontalAlign, VerticalAlign, ZRRectLike } from '../../util/types';
 
-var RADIAN = Math.PI / 180;
+const RADIAN = Math.PI / 180;
 
 interface LabelLayout {
     x: number
@@ -65,7 +65,7 @@ function adjustSingleSide(
     });
 
     function shiftDown(start: number, end: number, delta: number, dir: number) {
-        for (var j = start; j < end; j++) {
+        for (let j = start; j < end; j++) {
             if (list[j].y + delta > viewTop + viewHeight) {
                 break;
             }
@@ -84,7 +84,7 @@ function adjustSingleSide(
     }
 
     function shiftUp(end: number, delta: number) {
-        for (var j = end; j >= 0; j--) {
+        for (let j = end; j >= 0; j--) {
             if (list[j].y - delta < viewTop) {
                 break;
             }
@@ -103,7 +103,7 @@ function adjustSingleSide(
         cx: number, cy: number, r: number,
         dir: 1 | -1
     ) {
-        var lastDeltaX = dir > 0
+        let lastDeltaX = dir > 0
             ? isDownList                // right-side
                 ? Number.MAX_VALUE      // down
                 : 0                     // up
@@ -111,15 +111,15 @@ function adjustSingleSide(
                 ? Number.MAX_VALUE      // down
                 : 0;                    // up
 
-        for (var i = 0, l = list.length; i < l; i++) {
+        for (let i = 0, l = list.length; i < l; i++) {
             if (list[i].labelAlignTo !== 'none') {
                 continue;
             }
 
-            var deltaY = Math.abs(list[i].y - cy);
-            var length = list[i].len;
-            var length2 = list[i].len2;
-            var deltaX = (deltaY < r + length)
+            let deltaY = Math.abs(list[i].y - cy);
+            let length = list[i].len;
+            let length2 = list[i].len2;
+            let deltaX = (deltaY < r + length)
                 ? Math.sqrt(
                         (r + length + length2) * (r + length + length2)
                         - deltaY * deltaY
@@ -139,14 +139,14 @@ function adjustSingleSide(
         }
     }
 
-    var lastY = 0;
-    var delta;
-    var len = list.length;
-    var upList = [];
-    var downList = [];
+    let lastY = 0;
+    let delta;
+    let len = list.length;
+    let upList = [];
+    let downList = [];
     for (let i = 0; i < len; i++) {
         if (list[i].position === 'outer' && list[i].labelAlignTo === 'labelLine') {
-            var dx = list[i].x - farthestX;
+            let dx = list[i].x - farthestX;
             list[i].linePoints[1][0] += dx;
             list[i].x = farthestX;
         }
@@ -182,10 +182,10 @@ function avoidOverlap(
     viewLeft: number,
     viewTop: number
 ) {
-    var leftList = [];
-    var rightList = [];
-    var leftmostX = Number.MAX_VALUE;
-    var rightmostX = -Number.MAX_VALUE;
+    let leftList = [];
+    let rightList = [];
+    let leftmostX = Number.MAX_VALUE;
+    let rightmostX = -Number.MAX_VALUE;
     for (let i = 0; i < labelLayoutList.length; i++) {
         if (isPositionCenter(labelLayoutList[i])) {
             continue;
@@ -204,17 +204,17 @@ function avoidOverlap(
     adjustSingleSide(leftList, cx, cy, r, -1, viewWidth, viewHeight, viewLeft, viewTop, leftmostX);
 
     for (let i = 0; i < labelLayoutList.length; i++) {
-        var layout = labelLayoutList[i];
+        let layout = labelLayoutList[i];
         if (isPositionCenter(layout)) {
             continue;
         }
 
-        var linePoints = layout.linePoints;
+        let linePoints = layout.linePoints;
         if (linePoints) {
-            var isAlignToEdge = layout.labelAlignTo === 'edge';
+            let isAlignToEdge = layout.labelAlignTo === 'edge';
 
-            var realTextWidth = layout.textRect.width;
-            var targetTextWidth;
+            let realTextWidth = layout.textRect.width;
+            let targetTextWidth;
             if (isAlignToEdge) {
                 if (layout.x < cx) {
                     targetTextWidth = linePoints[2][0] - layout.labelDistance
@@ -240,7 +240,7 @@ function avoidOverlap(
                 }
             }
 
-            var dist = linePoints[1][0] - linePoints[2][0];
+            let dist = linePoints[1][0] - linePoints[2][0];
             if (isAlignToEdge) {
                 if (layout.x < cx) {
                     linePoints[2][0] = viewLeft + layout.labelMargin + realTextWidth + layout.labelDistance;
@@ -277,71 +277,71 @@ export default function (
     viewLeft: number,
     viewTop: number
 ) {
-    var data = seriesModel.getData();
-    var labelLayoutList: LabelLayout[] = [];
-    var cx;
-    var cy;
-    var hasLabelRotate = false;
-    var minShowLabelRadian = (seriesModel.get('minShowLabelAngle') || 0) * RADIAN;
+    let data = seriesModel.getData();
+    let labelLayoutList: LabelLayout[] = [];
+    let cx;
+    let cy;
+    let hasLabelRotate = false;
+    let minShowLabelRadian = (seriesModel.get('minShowLabelAngle') || 0) * RADIAN;
 
     data.each(function (idx) {
-        var layout = data.getItemLayout(idx);
+        let layout = data.getItemLayout(idx);
 
-        var itemModel = data.getItemModel<PieDataItemOption>(idx);
-        var labelModel = itemModel.getModel('label');
+        let itemModel = data.getItemModel<PieDataItemOption>(idx);
+        let labelModel = itemModel.getModel('label');
         // Use position in normal or emphasis
-        var labelPosition = labelModel.get('position') || itemModel.get(['emphasis', 'label', 'position']);
-        var labelDistance = labelModel.get('distanceToLabelLine');
-        var labelAlignTo = labelModel.get('alignTo');
-        var labelMargin = parsePercent(labelModel.get('margin'), viewWidth);
-        var bleedMargin = labelModel.get('bleedMargin');
-        var font = labelModel.getFont();
-
-        var labelLineModel = itemModel.getModel('labelLine');
-        var labelLineLen = labelLineModel.get('length');
+        let labelPosition = labelModel.get('position') || itemModel.get(['emphasis', 'label', 'position']);
+        let labelDistance = labelModel.get('distanceToLabelLine');
+        let labelAlignTo = labelModel.get('alignTo');
+        let labelMargin = parsePercent(labelModel.get('margin'), viewWidth);
+        let bleedMargin = labelModel.get('bleedMargin');
+        let font = labelModel.getFont();
+
+        let labelLineModel = itemModel.getModel('labelLine');
+        let labelLineLen = labelLineModel.get('length');
         labelLineLen = parsePercent(labelLineLen, viewWidth);
-        var labelLineLen2 = labelLineModel.get('length2');
+        let labelLineLen2 = labelLineModel.get('length2');
         labelLineLen2 = parsePercent(labelLineLen2, viewWidth);
 
         if (layout.angle < minShowLabelRadian) {
             return;
         }
 
-        var midAngle = (layout.startAngle + layout.endAngle) / 2;
-        var dx = Math.cos(midAngle);
-        var dy = Math.sin(midAngle);
+        let midAngle = (layout.startAngle + layout.endAngle) / 2;
+        let dx = Math.cos(midAngle);
+        let dy = Math.sin(midAngle);
 
-        var textX;
-        var textY;
-        var linePoints;
-        var textAlign;
+        let textX;
+        let textY;
+        let linePoints;
+        let textAlign;
 
         cx = layout.cx;
         cy = layout.cy;
 
-        var text = seriesModel.getFormattedLabel(idx, 'normal')
+        let text = seriesModel.getFormattedLabel(idx, 'normal')
                 || data.getName(idx);
-        var textRect = textContain.getBoundingRect(text, font, textAlign, 'top');
+        let textRect = textContain.getBoundingRect(text, font, textAlign, 'top');
 
-        var isLabelInside = labelPosition === 'inside' || labelPosition === 'inner';
+        let isLabelInside = labelPosition === 'inside' || labelPosition === 'inner';
         if (labelPosition === 'center') {
             textX = layout.cx;
             textY = layout.cy;
             textAlign = 'center';
         }
         else {
-            var x1 = (isLabelInside ? (layout.r + layout.r0) / 2 * dx : layout.r * dx) + cx;
-            var y1 = (isLabelInside ? (layout.r + layout.r0) / 2 * dy : layout.r * dy) + cy;
+            let x1 = (isLabelInside ? (layout.r + layout.r0) / 2 * dx : layout.r * dx) + cx;
+            let y1 = (isLabelInside ? (layout.r + layout.r0) / 2 * dy : layout.r * dy) + cy;
 
             textX = x1 + dx * 3;
             textY = y1 + dy * 3;
 
             if (!isLabelInside) {
                 // For roseType
-                var x2 = x1 + dx * (labelLineLen + r - layout.r);
-                var y2 = y1 + dy * (labelLineLen + r - layout.r);
-                var x3 = x2 + ((dx < 0 ? -1 : 1) * labelLineLen2);
-                var y3 = y2;
+                let x2 = x1 + dx * (labelLineLen + r - layout.r);
+                let y2 = y1 + dy * (labelLineLen + r - layout.r);
+                let x3 = x2 + ((dx < 0 ? -1 : 1) * labelLineLen2);
+                let y3 = y2;
 
                 if (labelAlignTo === 'edge') {
                     // Adjust textX because text align of edge is opposite
@@ -363,8 +363,8 @@ export default function (
                     : (dx > 0 ? 'left' : 'right'));
         }
 
-        var labelRotate;
-        var rotate = labelModel.get('rotate');
+        let labelRotate;
+        let rotate = labelModel.get('rotate');
         if (typeof rotate === 'number') {
             labelRotate = rotate * (Math.PI / 180);
         }
diff --git a/src/chart/pie/pieLayout.ts b/src/chart/pie/pieLayout.ts
index 9692fc2..8ff6d29 100644
--- a/src/chart/pie/pieLayout.ts
+++ b/src/chart/pie/pieLayout.ts
@@ -25,8 +25,8 @@ import GlobalModel from '../../model/Global';
 import ExtensionAPI from '../../ExtensionAPI';
 import PieSeriesModel from './PieSeries';
 
-var PI2 = Math.PI * 2;
-var RADIAN = Math.PI / 180;
+const PI2 = Math.PI * 2;
+const RADIAN = Math.PI / 180;
 
 function getViewRect(seriesModel: PieSeriesModel, api: ExtensionAPI) {
     return layout.getLayoutRect(
@@ -43,12 +43,12 @@ export default function (
     api: ExtensionAPI
 ) {
     ecModel.eachSeriesByType(seriesType, function (seriesModel: PieSeriesModel) {
-        var data = seriesModel.getData();
-        var valueDim = data.mapDimension('value');
-        var viewRect = getViewRect(seriesModel, api);
+        let data = seriesModel.getData();
+        let valueDim = data.mapDimension('value');
+        let viewRect = getViewRect(seriesModel, api);
 
-        var center = seriesModel.get('center');
-        var radius = seriesModel.get('radius');
+        let center = seriesModel.get('center');
+        let radius = seriesModel.get('radius');
 
         if (!zrUtil.isArray(radius)) {
             radius = [0, radius];
@@ -57,45 +57,45 @@ export default function (
             center = [center, center];
         }
 
-        var width = parsePercent(viewRect.width, api.getWidth());
-        var height = parsePercent(viewRect.height, api.getHeight());
-        var size = Math.min(width, height);
-        var cx = parsePercent(center[0], width) + viewRect.x;
-        var cy = parsePercent(center[1], height) + viewRect.y;
-        var r0 = parsePercent(radius[0], size / 2);
-        var r = parsePercent(radius[1], size / 2);
+        let width = parsePercent(viewRect.width, api.getWidth());
+        let height = parsePercent(viewRect.height, api.getHeight());
+        let size = Math.min(width, height);
+        let cx = parsePercent(center[0], width) + viewRect.x;
+        let cy = parsePercent(center[1], height) + viewRect.y;
+        let r0 = parsePercent(radius[0], size / 2);
+        let r = parsePercent(radius[1], size / 2);
 
-        var startAngle = -seriesModel.get('startAngle') * RADIAN;
+        let startAngle = -seriesModel.get('startAngle') * RADIAN;
 
-        var minAngle = seriesModel.get('minAngle') * RADIAN;
+        let minAngle = seriesModel.get('minAngle') * RADIAN;
 
-        var validDataCount = 0;
+        let validDataCount = 0;
         data.each(valueDim, function (value: number) {
             !isNaN(value) && validDataCount++;
         });
 
-        var sum = data.getSum(valueDim);
+        let sum = data.getSum(valueDim);
         // Sum may be 0
-        var unitRadian = Math.PI / (sum || validDataCount) * 2;
+        let unitRadian = Math.PI / (sum || validDataCount) * 2;
 
-        var clockwise = seriesModel.get('clockwise');
+        let clockwise = seriesModel.get('clockwise');
 
-        var roseType = seriesModel.get('roseType');
-        var stillShowZeroSum = seriesModel.get('stillShowZeroSum');
+        let roseType = seriesModel.get('roseType');
+        let stillShowZeroSum = seriesModel.get('stillShowZeroSum');
 
         // [0...max]
-        var extent = data.getDataExtent(valueDim);
+        let extent = data.getDataExtent(valueDim);
         extent[0] = 0;
 
         // In the case some sector angle is smaller than minAngle
-        var restAngle = PI2;
-        var valueSumLargerThanMinAngle = 0;
+        let restAngle = PI2;
+        let valueSumLargerThanMinAngle = 0;
 
-        var currentAngle = startAngle;
-        var dir = clockwise ? 1 : -1;
+        let currentAngle = startAngle;
+        let dir = clockwise ? 1 : -1;
 
         data.each(valueDim, function (value: number, idx: number) {
-            var angle;
+            let angle;
             if (isNaN(value)) {
                 data.setItemLayout(idx, {
                     angle: NaN,
@@ -130,7 +130,7 @@ export default function (
                 valueSumLargerThanMinAngle += value;
             }
 
-            var endAngle = currentAngle + dir * angle;
+            let endAngle = currentAngle + dir * angle;
             data.setItemLayout(idx, {
                 angle: angle,
                 startAngle: currentAngle,
@@ -154,10 +154,10 @@ export default function (
             // Average the angle if rest angle is not enough after all angles is
             // Constrained by minAngle
             if (restAngle <= 1e-3) {
-                var angle = PI2 / validDataCount;
+                let angle = PI2 / validDataCount;
                 data.each(valueDim, function (value: number, idx: number) {
                     if (!isNaN(value)) {
-                        var layout = data.getItemLayout(idx);
+                        let layout = data.getItemLayout(idx);
                         layout.angle = angle;
                         layout.startAngle = startAngle + dir * idx * angle;
                         layout.endAngle = startAngle + dir * (idx + 1) * angle;
@@ -169,8 +169,8 @@ export default function (
                 currentAngle = startAngle;
                 data.each(valueDim, function (value: number, idx: number) {
                     if (!isNaN(value)) {
-                        var layout = data.getItemLayout(idx);
-                        var angle = layout.angle === minAngle
+                        let layout = data.getItemLayout(idx);
+                        let angle = layout.angle === minAngle
                             ? minAngle : value * unitRadian;
                         layout.startAngle = currentAngle;
                         layout.endAngle = currentAngle + dir * angle;
diff --git a/src/chart/radar/RadarSeries.ts b/src/chart/radar/RadarSeries.ts
index c8d06a8..7612999 100644
--- a/src/chart/radar/RadarSeries.ts
+++ b/src/chart/radar/RadarSeries.ts
@@ -102,13 +102,13 @@ class RadarSeriesModel extends SeriesModel<RadarSeriesOption> {
     }
 
     formatTooltip(dataIndex: number) {
-        var data = this.getData();
-        var coordSys = this.coordinateSystem;
-        var indicatorAxes = coordSys.getIndicatorAxes();
-        var name = this.getData().getName(dataIndex);
+        let data = this.getData();
+        let coordSys = this.coordinateSystem;
+        let indicatorAxes = coordSys.getIndicatorAxes();
+        let name = this.getData().getName(dataIndex);
         return encodeHTML(name === '' ? this.name : name) + '<br/>'
             + zrUtil.map(indicatorAxes, function (axis, idx) {
-                var val = data.get(data.mapDimension(axis.dim), dataIndex);
+                let val = data.get(data.mapDimension(axis.dim), dataIndex);
                 return encodeHTML(axis.name + ' : ' + val);
             }).join('<br />');
     }
@@ -118,17 +118,17 @@ class RadarSeriesModel extends SeriesModel<RadarSeriesOption> {
      */
     getTooltipPosition(dataIndex: number) {
         if (dataIndex != null) {
-            var data = this.getData();
-            var coordSys = this.coordinateSystem;
-            var values = data.getValues(
+            let data = this.getData();
+            let coordSys = this.coordinateSystem;
+            let values = data.getValues(
                 zrUtil.map(coordSys.dimensions, function (dim) {
                     return data.mapDimension(dim);
                 }), dataIndex
             );
 
-            for (var i = 0, len = values.length; i < len; i++) {
+            for (let i = 0, len = values.length; i < len; i++) {
                 if (!isNaN(values[i] as number)) {
-                    var indicatorAxes = coordSys.getIndicatorAxes();
+                    let indicatorAxes = coordSys.getIndicatorAxes();
                     return coordSys.coordToPoint(indicatorAxes[i].dataToCoord(values[i]), i);
                 }
             }
diff --git a/src/chart/radar/RadarView.ts b/src/chart/radar/RadarView.ts
index 054c554..140e0c8 100644
--- a/src/chart/radar/RadarView.ts
+++ b/src/chart/radar/RadarView.ts
@@ -46,22 +46,22 @@ class RadarView extends ChartView {
     private _data: List<RadarSeriesModel>;
 
     render(seriesModel: RadarSeriesModel, ecModel: GlobalModel, api: ExtensionAPI) {
-        var polar = seriesModel.coordinateSystem;
-        var group = this.group;
+        let polar = seriesModel.coordinateSystem;
+        let group = this.group;
 
-        var data = seriesModel.getData();
-        var oldData = this._data;
+        let data = seriesModel.getData();
+        let oldData = this._data;
 
         function createSymbol(data: List<RadarSeriesModel>, idx: number) {
-            var symbolType = data.getItemVisual(idx, 'symbol') as string || 'circle';
-            var color = data.getItemVisual(idx, 'color') as ZRColor;
+            let symbolType = data.getItemVisual(idx, 'symbol') as string || 'circle';
+            let color = data.getItemVisual(idx, 'color') as ZRColor;
             if (symbolType === 'none') {
                 return;
             }
-            var symbolSize = normalizeSymbolSize(
+            let symbolSize = normalizeSymbolSize(
                 data.getItemVisual(idx, 'symbolSize')
             );
-            var symbolPath = symbolUtil.createSymbol(
+            let symbolPath = symbolUtil.createSymbol(
                 symbolType, -1, -1, 2, 2, color
             );
             symbolPath.attr({
@@ -84,8 +84,8 @@ class RadarView extends ChartView {
         ) {
             // Simply rerender all
             symbolGroup.removeAll();
-            for (var i = 0; i < newPoints.length - 1; i++) {
-                var symbolPath = createSymbol(data, idx);
+            for (let i = 0; i < newPoints.length - 1; i++) {
+                let symbolPath = createSymbol(data, idx);
                 if (symbolPath) {
                     symbolPath.__dimIdx = i;
                     if (oldPoints[i]) {
@@ -111,13 +111,13 @@ class RadarView extends ChartView {
         }
         data.diff(oldData)
             .add(function (idx) {
-                var points = data.getItemLayout(idx);
+                let points = data.getItemLayout(idx);
                 if (!points) {
                     return;
                 }
-                var polygon = new graphic.Polygon();
-                var polyline = new graphic.Polyline();
-                var target = {
+                let polygon = new graphic.Polygon();
+                let polyline = new graphic.Polyline();
+                let target = {
                     shape: {
                         points: points
                     }
@@ -128,8 +128,8 @@ class RadarView extends ChartView {
                 graphic.initProps(polygon, target, seriesModel, idx);
                 graphic.initProps(polyline, target, seriesModel, idx);
 
-                var itemGroup = new graphic.Group();
-                var symbolGroup = new graphic.Group();
+                let itemGroup = new graphic.Group();
+                let symbolGroup = new graphic.Group();
                 itemGroup.add(polyline);
                 itemGroup.add(polygon);
                 itemGroup.add(symbolGroup);
@@ -141,11 +141,11 @@ class RadarView extends ChartView {
                 data.setItemGraphicEl(idx, itemGroup);
             })
             .update(function (newIdx, oldIdx) {
-                var itemGroup = oldData.getItemGraphicEl(oldIdx) as graphic.Group;
-                var polyline = itemGroup.childAt(0) as graphic.Polyline;
-                var polygon = itemGroup.childAt(1) as graphic.Polygon;
-                var symbolGroup = itemGroup.childAt(2) as graphic.Group;
-                var target = {
+                let itemGroup = oldData.getItemGraphicEl(oldIdx) as graphic.Group;
+                let polyline = itemGroup.childAt(0) as graphic.Polyline;
+                let polygon = itemGroup.childAt(1) as graphic.Polygon;
+                let symbolGroup = itemGroup.childAt(2) as graphic.Group;
+                let target = {
                     shape: {
                         points: data.getItemLayout(newIdx)
                     }
@@ -174,11 +174,11 @@ class RadarView extends ChartView {
             .execute();
 
         data.eachItemGraphicEl(function (itemGroup: graphic.Group, idx) {
-            var itemModel = data.getItemModel<RadarSeriesDataItemOption>(idx);
-            var polyline = itemGroup.childAt(0) as graphic.Polyline;
-            var polygon = itemGroup.childAt(1) as graphic.Polygon;
-            var symbolGroup = itemGroup.childAt(2) as graphic.Group;
-            var color = data.getItemVisual(idx, 'color');
+            let itemModel = data.getItemModel<RadarSeriesDataItemOption>(idx);
+            let polyline = itemGroup.childAt(0) as graphic.Polyline;
+            let polygon = itemGroup.childAt(1) as graphic.Polygon;
+            let symbolGroup = itemGroup.childAt(2) as graphic.Group;
+            let color = data.getItemVisual(idx, 'color');
 
             group.add(itemGroup);
... 31598 lines suppressed ...


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@echarts.apache.org
For additional commands, e-mail: commits-help@echarts.apache.org