gpt4 book ai didi

javascript - 将 "extra"参数传递给存储在变量中的函数 - Javascript

转载 作者:行者123 更新时间:2023-11-30 12:45:48 25 4
gpt4 key购买 nike

我是 Javascript 的新手,我是自学的,所以这可能是一个明显的领域,但无论我如何表述这个问题,我似乎都无法真正理解这个问题。目前我正在通读 http://eloquentjavascript.net/chapter6.html (在 mozilla 的 MDN 上)。我现在已经遇到过几次了,如果可能的话,我只想简单地分解一下。

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

我不明白 isNotNaN(变量)在最后一步如何将“额外参数”(NaN)传递给存储在 isNotNaN 中的函数(negate(isNaN)."show(isNotNaN(NaN)); "

当试图解释封闭的概念时,我遇到了同样的问题。但是我不知道这个参数“NaN”在上面的函数中 going 在哪里,因为在我看来最后一条语句的结尾是这样的:

show(negate(isNaN, NaN));

我很乐意提供更多详细信息。将额外的参数传递给已经包含带参数的函数的变量的概念让我很困惑!

最佳答案

没有“额外”的论据。 negate() 函数本身返回一个定义为函数表达式的函数,然后可以使用传递的任意数量的原始(而非额外)参数调用该函数。闭包用于返回的函数以将对 isNaN 的引用保留为 func

var isNotNaN = negate(isNaN);

此时,isNotNaN 包含对函数的引用

function(x) {
return !func(x);
};

同样,此处的func 指的是传递给negate 函数的isNaN 参数,它是作用域链中的直接父级。结果类似,但不一样

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

不一样的原因是,如果我们改变isNaN的值,这个函数的行为就会改变。但是,在您发布的示例中, func 的值等于 isNaN 的原始值,并且由于闭包而不能被其范围之外的任何内容更改。

本质上,您可以传入任何函数并获得一个返回原始函数的否定结果的新函数。例如:

var isNotArray = negate(Array.isArray);
isNotArray(12);
//-> true

关于javascript - 将 "extra"参数传递给存储在变量中的函数 - Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22528037/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com