javascript - 理解 Eloquent Javascript 中的 negate() 函数示例(第 6 章)

标签 javascript

作为一名新的 javascript 开发人员,我花了一些时间处理来自 Chapter 6 of Eloquent Javascript 的代码片段,我仍在努力理解以下代码示例:

function negate(func) {
  return function(x) {
    return !func(x);
  };
}
var isNotNaN = negate(isNaN);
document.writeln(isNotNaN(NaN));

我特别迷惑的地方是下面这行,我只是不明白一般的调用以及 NaN 的变量/值来自哪里:

document.writeln(isNotNaN(NaN));

最佳答案

我认为 xdazz 几乎涵盖了它,但既然你说你仍然不明白它,也许听听别人的话会有所帮助。

这一行:

var isNotNaN = negate(isNaN);

...声明一个变量 isNotNan分配等于调用 negate() 的结果函数,传递 isNan作为参数。

那个参数isNan实际上是一个函数 described by MDN ,但是negate()会接受任何函数作为参数,例如你可以说 var isNotFinite = negate(isFinite); .

现在 negate()函数实际上创建并返回另一个函数,所以在该行运行 isNotNan 之后返回函数的引用,这意味着您可以将其称为 isNotNan(someVal) .

然后一行:

document.writeln(isNotNaN(NaN));

...调用isNotNan()并通过它 NaN作为参数,并将结果写入文档。

"I just don't understand...where the variable/value for NaN comes from"

NaN是全局对象的属性。简单来说,它是 JS 环境提供给你的常量。

关于如何negate()函数起作用,它依赖于“闭包”的概念,这意味着在 negate() 中声明的函数即使在 negate() 之后也可以访问它的变量和参数 完成。 您会注意到返回的函数引用了 func范围。因此,当您通过 isNotNaN() 调用返回的函数时它仍然可以访问原始 func设置为 isNan 的参数功能。

效果有点像这样做:

var isNotNaN = function(x) {
    return !isNan(x);
};

关于javascript - 理解 Eloquent Javascript 中的 negate() 函数示例(第 6 章),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12016213/

相关文章:

javascript - 在 react 中从同一文件导入多个组件而不是导入每个组件的正确方法是什么

javascript - 为什么 javascript Number 函数返回该数字的错误值?

javascript - 如何存储对刚刚插入的 div 的引用

javascript - 验证输入是否仅包含特殊字符而没有任何数字

javascript - 在 forEach 上通过引用传递

javascript - Passport.js、express.js - 在 oauth 后返回同一页面

javascript - 如何为 [ngStyle] 设置动态 css 样式

javascript - ES6模块: export before finishing definitions?

javascript - parse Int 不适用于日期函数

javascript - 如何从嵌套钩子(Hook)函数访问数据属性?