Javascript babel编译的ES6中的块范围
我知道在es6中,这是如何制作块范围Javascript babel编译的ES6中的块范围,javascript,node.js,ecmascript-6,babeljs,Javascript,Node.js,Ecmascript 6,Babeljs,我知道在es6中,这是如何制作块范围 'use strict'; { let account = [1678922, 300450]; let compute = (credit, debit) => { return credit - debit; } console.log(compute(...account)); } ES5[这是我所期望的] (function(){ var account = [1678922, 3
'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);
巴别塔汇编
'use strict';
{
var account = [1678922, 300450];
var compute = function compute(credit, debit) {
return credit - debit;
};
console.log(compute.apply(undefined, account));
}
我想删除编译版本中的全局变量
问题:
任何帮助都将不胜感激。谢谢 巴别塔编译示例;继续评论: 编辑:基于您的示例 预编译:
{
let account = [1678922, 300450];
let compute = (credit, debit) => {
return credit - debit;
}
console.log(compute(...account));
}
{
let account = [16789, 3004];
let compute = (credit, debit) => {
return credit - debit;
}
console.log(compute(...account));
}
邮政编码:
{
var account = [1678922, 300450];
var compute = function compute(credit, debit) {
return credit - debit;
};
console.log(compute.apply(undefined, account));
}
{
var _account = [16789, 3004];
var _compute = function _compute(credit, debit) {
return credit - debit;
};
console.log(_compute.apply(undefined, _account));
}
本质上,这并不重要。Babel正在以一种无所谓的方式智能地编译它。添加“使用严格”;上面是你的脚本?你能给一些上下文吗?我可以想出很多方法来解决这个问题:将它定义为您正在使用的函数,使用对象文字来存储它,等等,但这实际上取决于您为什么需要它以及您计划如何使用它。@publimeobject,我相信给出的上下文是清楚的。为什么块作用域不能按预期工作。您的示例输出不是Babel输出的:它不需要函数,因为Babel假设文件将是模块,因此模块加载器将负责将每个文件包装到IIFE中。@DrEarnest-否。他在块中声明了带有
let
的变量。这是块作用域,而不是Javascript ES6+中的全局作用域,OP认为babel应该交叉编译为ES5代码,该代码尊重并实现ES6.No中的块作用域。试着把我的例子放到babeljs.io中。我不知道为什么你会得到不同的结果。我正在使用cli。还有一个,它可以在其他脚本中访问。想象一下,他们是否可以在控制台中键入account或_account。我不确定。我正在通过babel loader使用webpack进行编译。给定它输出的模块范围,由于文件本身是通过函数导出的,并且webpack需要并调用,因此这些变量都不能通过全局范围使用。我想这可能是一个特定于网页包的东西,但由于函数包装器的存在,我无法访问全局范围。如上所述,如果您不使用babeljs.io网站没有的模块绑定器,您将只获得一个全局绑定器。不过现在每个人都使用捆绑包,所以这不是问题。哦,我明白了。我还没有尝试使用模块系统。但我认为在这个项目中。我应该学,这是必须的。谢谢你抽出时间。