Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 箭头函数传递此参数是否比bind方法快_Javascript_Performance_Ecmascript 6_Arrow Functions - Fatal编程技术网

Javascript 箭头函数传递此参数是否比bind方法快

Javascript 箭头函数传递此参数是否比bind方法快,javascript,performance,ecmascript-6,arrow-functions,Javascript,Performance,Ecmascript 6,Arrow Functions,我已经用ES6做了一段时间的实验,我对方法.bind(this)与新的箭头函数相比的性能有一个疑问 我想知道使用.bind(this)到传统函数是否有性能改进,或者使用用户箭头函数是否更好,以及原因 我做了以下测试,但我不确定为什么每次执行测试时都会得到不同的值 函数useBind(){ if(this&&this.i){ console.log(this.i); } } const noBind=()=>{ if(this&&this.i){ console.log(this.i); } }

我已经用ES6做了一段时间的实验,我对方法
.bind(this)
与新的箭头函数相比的性能有一个疑问

我想知道使用
.bind(this)
到传统函数是否有性能改进,或者使用用户箭头函数是否更好,以及原因

我做了以下测试,但我不确定为什么每次执行测试时都会得到不同的值

函数useBind(){
if(this&&this.i){
console.log(this.i);
}
}
const noBind=()=>{
if(this&&this.i){
console.log(this.i);
}
}
函数goFat(){
这个。i=10;
对于(变量i=0;i<100;i++){
noBind();
}
}
函数gottranditional(){
这个i=20;
对于(变量i=0;i<100;i++){
绑定(这个)();
}
}
函数竞赛(){
var start=performance.now();
传统的();
log('Traditional appeased:'+(performance.now()-start));
开始=性能。现在();
戈法特()
log('Fat运行时间:'+(performance.now()-start));
开始=性能。现在();
传统的();
log('Traditional appeased:'+(performance.now()-start));
开始=性能。现在();
戈法特()
log('Fat运行时间:'+(performance.now()-start));
开始=性能。现在();
传统的();
log('Traditional appeased:'+(performance.now()-start));
开始=性能。现在();
戈法特()
log('Fat运行时间:'+(performance.now()-start));
console.log('----');
}

很抱歉,如果这个问题重复或者有其他类似的主题,我现在还找不到具体的答案。

您会得到不同的结果,因为您的运行时主要是对
console.log()的调用。
。如果在内部循环中执行类似于
console.log()
的密集操作,那么调用它们的方式不会影响运行时

一般来说,你不应该关心微优化,直到你知道你需要它。使用适合情况的样式。如果可以使用箭头函数,请使用它们。它们避免创建新的函数对象,而不是
bind


如果要实际调用绑定函数(而不是
useBind.bind(this);useBind()
),则必须重写测试。如果您关心性能,那么应该在循环之外进行绑定。除非您也想测量创建绑定函数的影响。

useBind.bind(此);useBind()-无论如何,这不是
bind
的工作方式。您试图做的是什么,这对性能至关重要?您关心调用的性能还是创建函数对象的性能吗?
useBind.bind(此)需要在循环之前调用,换句话说,您已经编写了具有性能泄漏的人工情况。我猜箭头函数对您来说更快。。。少打字。。。