使用 Babel.js 将 ES6 箭头函数编译为 Es5

2024-06-20



在查看 Mozilla 文档上的 ES6 箭头函数文档时,我了解到箭头函数应用了严格模式的所有规则,除了在link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions#Relation_with_strict_mode

  var f = () => { 'use strict'; return this};
    var g = function () { 'use strict'; return this;}

    console.log(f()); //prints Window
    console.log(g()); // prints undefined

    //we can test this in firefox!

But, Babel.js正在将箭头函数代码转换为返回的 ES5 代码undefined而不是Window()

"use strict";

setTimeout(function () {
  return undefined;
}, 100);

So, the above snippet is the output from Babel.js. Couldn't it be the below output?
"use strict";

setTimeout(function () {
  return this;
}.bind(Window), 100);

如果我写 ES6,我会期望Window而不是undefined
这是一个错误吗?
或者,我误解了什么?


tl;dr:Babel 假设每个文件都是module。模块是strict默认情况下和他们的this值为undefined.


这包含在巴别塔常见问题解答 http://babeljs.io/docs/faq/#why-is-this-being-remapped-to-undefined-:

Babel 假设所有输入代码都是 ES2015 模块。 ES2015 模块是隐式严格模式,因此这意味着顶层this is not window在浏览器中也不是exports在节点中。

如果您不希望出现这种行为,则可以选择禁用严格转换器:

$ babel --blacklist strict script.js

require("babel").transform("code", { blacklist: ["strict"] });

请注意:如果您这样做,您将自愿偏离规范,这可能会导致未来的互操作问题。

See the 严格的变压器文档 http://babeljs.io/docs/advanced/transformers/other/strict了解更多信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Babel.js 将 ES6 箭头函数编译为 Es5 的相关文章

随机推荐

  • 结构中的内存布局差异

    我在 C 中有以下结构 struct A int a double b float c 该结构与添加了函数的结构之间的内存布局是否存在差异 struct B int a double b float c void foo B foo do
  • ios7 故事板项目不会移动

    我试图在我的视图控制器布局中移动故事板项目 但是当在模拟器中运行时 它们不会移动 它们似乎粘在我放置它们的上方的橙色虚线上 那些橙色线是什么 为什么我无法移动我的物品 Here s what it looks like in the sim
  • 使用不同的结构体定义来模拟 C 中的公共和私有字段

    我已经编写 C 语言相当长的时间了 并且显然知道 C 不支持结构中显式的私有和公共字段 然而 我 相信 我已经找到了一种相对干净的方法来实现这一点 而无需使用任何宏或巫术 并且我希望更深入地了解我可能忽略的可能问题 文件夹结构在这里并不是那
  • 您总是在发布后重定向吗?如果是,您如何管理?

    假设您正在提交一个表单 这会影响您的数据库 添加记录 删除记录 更新记录 您的请求如下所示 POST 应用程序 操作 更新 现在 假设您已完成更新 因此您希望将用户带到主页 Response sendRedirect application
  • 为什么你需要创建这些 json 读/写,而在 java 中你不需要创建这些 json 读/写?

    如果我错了 请纠正我 但是当使用 Java 和 Spring MVC 时 您不必创建这些额外的类来将 Java 类映射到 JSON 以及将 JSON 映射到类 为什么必须在 Play with Scala 中执行此操作 和Scala有关系吗
  • git merge --squash 和 gitcherry-pick 有什么区别?

    如果我在标准的主功能工作流程中工作 那么将功能分支压缩到主功能分支和将其挑选到主功能分支之间有什么区别 分支示例 m1 m2 master f1 f2 feature 我认为两者都有相同的输出 即 m1 m2 m3 master f1 f2
  • tsconfig.json 中模块类型的区别

    在 tsconfig json 中 compilerOptions target es5 module commonjs moduleResolution node sourceMap true emitDecoratorMetadata
  • module_init() 与 core_initcall() 与 Early_initcall()

    在驱动程序中 我经常看到使用这三种类型的初始化函数 module init core initcall early initcall 在什么情况下我应该使用它们 另外 还有其他的初始化方式吗 它们决定内置模块的初始化顺序 司机们会使用dev
  • 使用 c# 的 StrucLayout 和 FieldOffset 表示联合位域

    据我了解 为了在 C 中表示联合 我需要使用 StructLayout LayoutKind Explicit 和 FieldOffset x 属性来指定联合内的字节偏移量 但是 我有一个想要表示的以下联合 并且 FieldOffset a
  • 在 Autodesk Viewer 中查找可见零件的中心点

    请原谅这个问题的模糊性 但是在查看器的模型中 我想知道如何建立可见部分的中心点 当我在带有隐藏部分的模型上调用 fit to view 时 我可以看到查看器中出现一个点 它似乎恰好代表了这一点 可见部分的中心 如何在代码中检索该点的坐标 小
  • 在 Python 中绘制正弦曲线的傅里叶变换

    以下 python 程序绘制正弦曲线 import matplotlib pyplot as plt import numpy as np Canvas plt style use ggplot Frequency Oscillations
  • 扩展蓝图类?

    我想覆盖timestamps 函数中发现Blueprint班级 我怎样才能做到这一点 e g public function up Schema create users function Blueprint table table gt
  • 使用占位符和 ngModel 动态生成输入元素

    我想以角度 2 动态生成输入元素 我有占位符标题数组和值数组 如下所示 在我的组件中 我有两个映射 如下所示 其中两个映射的键相同 将值映射到标题 const placeholderMap fullName Name value Produ
  • 蛋糕控制台 2.2.1:烘焙错误

    运行 MAMP 的 OSX 机器 CakePHP 2 2 1 已正确安装和配置 这意味着当我浏览到 Index php 文件时 所有绿色条都显示出来 我已经完成了博客教程 并且正在开发我的第二个应用程序 其中脚手架已启动并运行 现在我第一次
  • 如何在读取文件期间从每一行中删除换行符? [复制]

    这个问题在这里已经有答案了 我正在从包含一个 字 行的文件中读取行 例如 dog cat person tree 每个单词还包含一个换行符 n特点 我想将它们读入列表并丢弃换行符 我设计的方法是阅读readlines 然后将列表处理为str
  • 如何处理数据库中的巨大结果集

    我正在设计一个多层数据库驱动的 Web 应用程序 SQL 关系数据库 用于中间服务层的 Java 用于 UI 的 Web 语言其实并不重要 中间服务层执行数据库的实际查询 用户界面只是要求某些数据 并不知道它是由数据库支持的 问题是如何处理
  • 为什么这些数字不相等?

    下面的代码显然是错误的 有什么问题 i lt 0 1 i lt i 0 05 i 1 0 15 if i 0 15 cat i equals 0 15 else cat i does not equal 0 15 i does not eq
  • Maven:无法传输文件 XXX 返回代码为: 501 ,ReasonPhrase:HTTPS 必需

    我在构建 Maven 项目时收到意外的 501 错误代码 该消息显示需要 HTTPS 但我没有更改我的 settings xml 如何检查我的配置是否发生更改 我怎样才能让事情正常运转 其原因解释于Maven 依赖项失败并出现 501 错误
  • 在这种情况下如何填充 Mongoose?

    const userSchema new mongoose Schema email type String unique true password String notifications notifiId type Schema Ty
  • 使用 Babel.js 将 ES6 箭头函数编译为 Es5

    在查看 Mozilla 文档上的 ES6 箭头函数文档时 我了解到箭头函数应用了严格模式的所有规则 除了在link https developer mozilla org en US docs Web JavaScript Referenc