作为一名新的 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/