gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 06:01:24 27 4
gpt4 key购买 nike



在 Mozilla 文档中查看 ES6 箭头函数的文档时,我了解到箭头函数应用严格模式的所有规则,除了在 link 中描述的规则。

  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!

但是,Babel.js 将箭头函数代码转换为 ES5 代码,返回 undefined 而不是 Window( demo link ) < br/>

"use strict";

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

所以,上面的代码片段是 Babel.js 的输出。难道不是下面的输出吗?

"use strict";

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

如果我正在编写 ES6,我希望使用 Window 而不是 undefined
这是错误吗?
或者,我误解了什么?

最佳答案

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


这包含在 Babel FAQ 中:

Babel assumes that all input code is an ES2015 module. ES2015 modules are implicitly strict mode so this means that top-level this is not window in the browser nor is it exports in node.

If you don't want this behaviour then you have the option of disabling the strict transformer:

$ babel --blacklist strict script.js

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

PLEASE NOTE: If you do this you're willingly deviating from the spec and this may cause future interop issues.

See the strict transformer docs for more info.

关于javascript - 使用 Babel.js 将 ES6 箭头函数编译为 Es5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30702553/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com