Javascript babel编译的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

我知道在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);
巴别塔汇编

'use strict';

{
    var account = [1678922, 300450];

    var compute = function compute(credit, debit) {
        return credit - debit;
    };

    console.log(compute.apply(undefined, account));
}
我想删除编译版本中的全局变量

问题:

  • 没有任何插件,有没有办法做到这一点
  • 如果没有,是否有使用npm的插件
  • PS:我需要支持古老的浏览器。至少IE9


    任何帮助都将不胜感激。谢谢

    巴别塔编译示例;继续评论:

    编辑:基于您的示例

    预编译:

    {
        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网站没有的模块绑定器,您将只获得一个全局绑定器。不过现在每个人都使用捆绑包,所以这不是问题。哦,我明白了。我还没有尝试使用模块系统。但我认为在这个项目中。我应该学,这是必须的。谢谢你抽出时间。