【发布时间】:2016-10-01 02:49:36
【问题描述】:
我知道在 es6 中这是如何制作块作用域的。
'use strict';
{
let account = [1678922, 300450];
let compute = (credit, debit) => {
return credit - debit;
}
console.log(compute(...account));
}
ES5 [这是我所期望的]
(function(){
var account = [1678922, 300450];
var compute = function compute(credit, debit) {
return credit - debit;
};
console.log(compute.apply(undefined, account));
})();
console.log(user1);
BABEL编译
'use strict';
{
var account = [1678922, 300450];
var compute = function compute(credit, debit) {
return credit - debit;
};
console.log(compute.apply(undefined, account));
}
我想删除编译版本中的全局变量。
问题:
- 有没有什么方法可以不用插件?
- 如果没有,是否有使用 npm 的插件?
PS:我需要支持古代浏览器。至少 IE9。
任何帮助将不胜感激。谢谢!
【问题讨论】:
-
添加“使用严格”;在你的脚本之上?
-
你能给出一些背景信息吗?我可以想出很多方法来解决这个问题:将其限定为您正在使用的函数,使用对象文字来存储它等等,但这实际上取决于您为什么需要它以及您打算如何使用它。
-
@thesublimeobject,我相信给出的上下文很清楚。为什么块范围没有按预期工作。
-
您的示例输出不是 Babel 输出的:babeljs.io/repl/… 它不需要函数,因为 Babel 假定文件将是模块,因此模块加载器将负责将每个文件包装在 IIFE 中.
-
@DrEarnest - 不。他在块内用
let声明了变量。那是块作用域,而不是 Javascript ES6+ 中的全局作用域,OP 认为 babel 应该交叉编译为尊重和实现 ES6 中的块作用域的 ES5 代码。
标签: javascript node.js ecmascript-6 babeljs