假设我正在使用HTML5 Canvas 制作一些动画。如果我想为对象的方法设置动画,那么从性能 Angular 考虑,这是更好的选择(假设我不在乎IE8):

setTimeout(this.render.bind(this), 15);

或者
var self = this;
setTimeout(function () { self.render() }, 15);

我的特殊案例不够激烈,无法在视觉上真正发挥作用。我只是想找出最佳做法。

我想用bind创建一个新函数比创建一个闭包要少一些开销,但是我想问专家。

最佳答案

JavaScript性能问题很棘手,因为那里的各种引擎具有非常不同的性能特征。一台引擎快的速度在另一台引擎慢的速度。

您的关闭确实应该非常快;毕竟,所有函数都是闭包,并且您的self变量是在直接包含的上下文中定义的(因此,在它的作用域链中没有很多东西可以查看)。

但是从理论上讲,一个原生支持ES5功能的引擎可以优化bind的工作方式,使其更快(甚至不需要一个作用域链查找)。

有关系吗?不,我会使用对您有意义的东西。请注意,IE8并不是目前唯一不具有ES5功能的浏览器(尽管您始终可以使用es5垫片中的一种;与某些ES5功能不同,bind可以由ES3代码中的垫片完美地仿真-尽管这样做,他们必须使用call/apply,这可能比某些引擎上的闭包慢一些)。

关于javascript - 对象方法上的setTimeout-ES5绑定(bind)还是关闭?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8928880/

10-12 06:53