为什么对同一函数的两个绑定返回不同的值

时间:2015-12-14 20:56:35

标签: javascript

将函数绑定到同一个上下文时,每次生成的引用都不同。



function foobar() {
    return 1;
}

var foo = foobar.bind(this);
var bar = foobar.bind(this);

console.log(foo === bar); // Nope




  1. 该代码是否每次都复制该功能?
  2. 缓存该行为会不会有任何好处?
  3. 具体是实施吗?
  4. 或者它是在ecmascript规范中指定的吗?

2 个答案:

答案 0 :(得分:4)

是的Function.prototype.bind()每次都会创建一个新功能。

答案 1 :(得分:2)

  

该代码是否每次都复制该功能?

它是否复制原始函数是底层JS引擎的实现细节。

bind的返回值是一项新功能,每次拨打bind时,您都会获得一个新功能。

  

缓存这种行为会不会有任何好处?

在缓存生成的函数时可能会有轻微的性能提升,但可能不足以担心,除非您生成数百个相同函数的绑定副本。小心premature optimization