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

Why two bindings to the same function return different values

本文关键字:绑定 两个 返回 函数 为什么      更新时间:2023-09-26

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

function foobar() {
    return 1;
}
var foo = foobar.bind(this);
var bar = foobar.bind(this);
console.log(foo === bar); // Nope

  1. 那个代码每次都复制函数吗
  2. 缓存这种行为不会有任何好处吗
  3. 它是具体实施的吗
  4. 或者它是在ecmascript规范的某个地方指定的

是的,Function.protype.bind()每次都会创建一个新函数。

那个代码每次都复制函数吗?

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

bind的返回值是一个新函数,每次调用bind时都会得到一个新的函数。

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

缓存生成的函数可能会带来轻微的性能提升,但可能还不够担心,除非您正在生成同一函数的数百个绑定副本。小心过早优化。