绑定返回的结果和使用function()的结果之间有什么区别

What is the difference between the return from bind and the result of using function()

本文关键字:结果 之间 什么 区别 返回 绑定 function      更新时间:2024-06-25

bind的返回值和通过function()创建等价项的结果之间有什么区别?有什么有效的区别吗?(我不是在问bind的上下文保留属性)。是否有任何技术/性能方面的原因使您可能更喜欢一种方法。

var myFunc = foo.bind(undefined, bar);

var myFunc = function() { foo.call(undefined, bar) };

有什么有效的区别吗?

你可能更喜欢它,有什么技术/性能方面的原因吗方法

第二个版本包括一个额外的函数调用。

没有技术差异,但有性能和无缺陷的差异。function.prototype中的所有函数都是由一些最好的开发人员编写的,以遵循所有程序员所期望的特定规范。当然,经过了很好的测试。

最好不要重新发明轮子,而且这个开发人员将比我们做得更好。

注意1:I8现在低于使用量的0.3%,所以如果它不支持绑定,请不要介意。在你的网站上有很多不支持很多东西的机会。

注2:在chrome中绑定的实现是这样的:

在chrome中的开发控制台中写入:Function.prototype.bind结果你得到了这个

function(e,t){var n=this;return null!=t&&(t=Array.from(t)),function(){return n.apply(e,t||arguments)}}

额外的好处:这里有一个非常类似的实现,用于更干净的代码(复制Prototype.js中的.bind方法):

Function.prototype.bind = function(){ 
  var fn = this, args = Array.prototype.slice.call(arguments), 
                        object = args.shift(); 
  return function(){ 
    return fn.apply(object, 
      args.concat(Array.prototype.slice.call(arguments))); 
  }; 
}; 

#bind在IE8中不工作。因此,在这种情况下,您可以使用第二个示例=),但最好像这里那样实现#bind