上下文:
我正在阅读《你不知道 JS:Up & Going》,第 2 章:进入 JavaScript的书。在Polyfilling部分,作者给出了如下示例:
if (!Number.isNaN) {
Number.isNaN = function isNaN(x) {
return x !== x;
};
}
所以,这里要做的是创建一个 polyfill,以便 ES6 方法Number.isNaN可以在旧浏览器(即 ES6 之前的版本)中运行。正如我所料,他使用了旧的isNaN方法。前一种方法实际上旨在通过设计弃用后者。
问题:
为什么 isNaN 被用作命名函数表达式的标识符?我原以为它会以某种方式在体内使用。为什么?因为在网络上的示例中通常会看到所有标识符,所以在比较函数表达式和函数声明时,采用以下形式:
函数声明:
function foo() {
// ..
}
函数表达式:
var foo = function bar() {
// ..
};
所以在这个例子中bar被定义在 'bar()' 字符串之后的括号内。那么,当isNaN是 JavaScript 中已经定义的函数时,为什么还要使用上面的 'isNaN'呢?我们实际上是为了 polyfill 的目的而覆盖它吗?我在这里错过/误解了什么?