为什么用babel编译后const、let、arrow函数还存在?

After using babel to compile, why does const、let、arrow function still exist?

using babel to compile

之前

let name="Alex";
const age=18;
const add=(x,y)=>x+y;

使用babel编译后

"use strict";
let name = "Alex";
const age = 18;
const add = (x, y) => x + y;

我真的很困惑,为什么它根本没有改变任何东西。

一切都与您选择的目标有关。如果您只想为使用现代浏览器的人提供该应用程序,何必费心调整他们完全理解的语法?

在这种特殊情况下,它甚至与 'modern' 无关:它与不古老有关。 let/const 和箭头函数支持是在 2016 年发布的浏览器中引入的——五年前。

使用 Babel,您通常通过设置 @preset-env 然后通过一些使用编号选择目标列表来配置您的目标:

{
  "targets": "> 0.25%, not dead"
}

... 或直接通过提供指定最低版本支持的对象:

{
  "targets": {
    "chrome": "58",
    "ie": "11"
  }
}

现在 Babel 有责任识别所提供的(明确或隐含的)浏览器列表确实支持的功能 - 并填充它不支持的功能。

你可以玩这个设置 in your browser。例如,以下是将 'ie 11' 设置为目标时代码的转换方式:

... 以下是 Chrome 91:

的查找方式