假设我正在使用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/