顶部的 func bike() 是否已被底部的另一个函数覆盖

Does the func bike () at the top has been overriden by another function at the bottom

var bike = function() {
  console.log(this.name);
}
var name = "Ninja";
var obj1 = { name: "Pulsar" };
var obj2 = { name: "Gixxer" };

var originalBikeFun = bike;
bike = function() {
  originalBikeFun.call(obj1);
};

bike();           // "Pulsar"
bike.call(obj2);  // "Pulsar"

我需要解释,因为我听不懂。当我为她分配 originalBikeFun 时,顶部的功能(即自行车)是否被覆盖。这是如何运作的? (顺便说一句,我只复制mdn提供的例子)#javascript

让我逐步解释您的代码片段中发生了什么:

  1. 您声明变量 bike 并将其赋值给它 reference 此函数:
function() {
  console.log(this.name);
}
  1. 您声明变量 originalBikeFun 并将 reference 分配给上面提到的函数。此时,您有两个变量 bikeoriginalBikeFun,它们仅指向存储函数的内存中的一个区域。
  2. 您将 (取消引用) 分配给 bike 变量这个新函数:
function() {
  originalBikeFun.call(obj1);
}

此刻你有变量bike指向这个函数:

function() {
  originalBikeFun.call(obj1);
}

和变量 originalBikeFun 指向先前分配的函数:

function() {
  console.log(this.name);
}
  1. 当您调用 bike 函数时,这些代码行将执行:
a) originalBikeFun.call(obj1);
b) console.log(this.name);

所以这次调用的结果是"Pulsar"。

  1. 当您调用 bike.call(obj2) 时,与前一个函数调用的不同之处在于您只需将 obj2 作为 this 指针传递,但是因为在函数 bike 中您只有一个调用重新分配 this 指针,所以没有区别。