Javascript 块作用域函数:ECMAScript 6与ECMAScript 5

Javascript 块作用域函数:ECMAScript 6与ECMAScript 5,javascript,Javascript,关于块作用域功能,ES6比ES5有哪些优势?我的意思是,在这两种情况下,块看起来非常相似,所以它有什么区别,从性能角度看,哪种方法更好 沙六段 { function foo() { return 1; } foo() === 1; { function foo() { return 2; } foo() === 2; } foo() === 1; } ES

关于块作用域功能,ES6比ES5有哪些优势?我的意思是,在这两种情况下,块看起来非常相似,所以它有什么区别,从性能角度看,哪种方法更好

沙六段

{
    function foo() {
        return 1;
    }

    foo() === 1;
    {
        function foo() {
            return 2;
        }

        foo() === 2;
    }
    foo() === 1;
}
ES5区块

(function () {
    var foo = function () {
        return 1;
    }
    foo() === 1;
    (function () {
        var foo = function () {
            return 2;
        }
        foo() === 2;
    })();
    foo() === 1;
})();

下面是一个测试,以显示哪种速度最快:

document.getElementById('btn').addEventListener('click',({target})=>{
target.disabled=true;
target.innerHTML=“Running…”;
const suite=newbenchmark.suite();
document.getElementById('ES6')。style.fontWeight='';
document.getElementById('ES5')。style.fontWeight='';
suite.add('ES6',()=>{
{
函数foo(){
返回1;
}
foo()==1;
{
函数foo(){
返回2;
}
foo()==2;
}
foo()==1;
}
}).add('ES5',()=>{
(功能(){
var foo=函数(){
返回1;
}
foo()==1;
(功能(){
var foo=函数(){
返回2;
}
foo()==2;
})();
foo()==1;
})();
})
.on('cycle',({target:bench})=>document.getElementById(bench.name).textContent=`${bench.name}:~${Benchmark.formatNumber(bench.hz | 0)}ops/sec(~${Benchmark.formatNumber(Math.round(1e9/bench.hz))}ns/op)`)
.on('complete',function(){
const el=document.getElementById(this.filter('faster').map('name')[0]),
hz=此.filter('faster').map('hz')[0],
其他=此.filter('slowest').map('hz'),
平均值=其他。减少((a,b)=>a+b,0)/others.length;
el.style.fontWeight=‘粗体’;
el.textContent+=`\u{1f451}${Math.round((1-avg/hz)*100,2)}快一个百分点`;
target.disabled=false;
target.innerHTML=“运行”;
})
.run({'async':true});
});


运行
我想ES6 one会更快,因为不需要创建、调用和返回值的函数。谢谢Jed,但是ES6 block会被提升吗?我真的很有兴趣看看有人打算如何推断什么对性能更好,看到有相当多的JS引擎实现,它们甚至不以相同的方式运行。而且,这似乎是一个如此小规模的“优化”,为什么会有人这样做呢?看起来,问这个问题比你得到的所有表现都要浪费更多的时间。工作的正确工具发生了什么?为什么您将
函数foo
更改为
var foo=function
?这不是块,这是一种生活。