【发布时间】:2017-10-19 14:06:29
【问题描述】:
我已经用 ES6 试验了一段时间,我对 .bind(this) 方法与新箭头函数相比的性能有疑问。
我想知道使用.bind(this) 对传统函数是否有任何性能改进,或者对用户箭头函数是否更好以及为什么。
我进行了以下测试,但我不确定为什么每次执行测试都会得到不同的值。
function useBind() {
if(this && this.i) {
console.log(this.i);
}
}
const noBind = () => {
if(this && this.i) {
console.log(this.i);
}
}
function goFat() {
this.i = 10;
for (var i = 0; i < 100; i++) {
noBind();
}
}
function goTraditional() {
this.i = 20;
for (var i = 0; i < 100; i++) {
useBind.bind(this)();
}
}
function race() {
var start = performance.now();
goTraditional();
console.log('Traditional elapsed: ' + (performance.now() - start));
start = performance.now();
goFat()
console.log('Fat elapsed: ' + (performance.now() - start));
start = performance.now();
goTraditional();
console.log('Traditional elapsed: ' + (performance.now() - start));
start = performance.now();
goFat()
console.log('Fat elapsed: ' + (performance.now() - start));
start = performance.now();
goTraditional();
console.log('Traditional elapsed: ' + (performance.now() - start));
start = performance.now();
goFat()
console.log('Fat elapsed: ' + (performance.now() - start));
console.log('------');
}
对不起,如果这个问题重复或有其他类似的主题,但我直到现在才找到具体的答案。
【问题讨论】:
-
useBind.bind(this); useBind();- 这不是bind的工作方式。 -
您尝试做什么对性能如此重要?
-
你关心调用的性能还是创建函数对象的性能?
-
useBind.bind(this);需要在循环之前调用,也就是说你写了人为的性能泄漏情况 -
我猜箭头函数对你来说更快...更少打字...
标签: javascript performance ecmascript-6 arrow-functions