gpt4 book ai didi

javascript - 我正在阅读 Eloquent Javascript,我对这个部分函数示例有点困惑。请帮忙解释一下

转载 作者:搜寻专家 更新时间:2023-11-01 04:33:37 27 4
gpt4 key购买 nike

function asArray(quasiArray, start) {
var result = [];
for (var i = (start || 0); i < quasiArray.length; i++)
result.push(quasiArray[i]);
return result;
}

function partial(func) {
var fixedArgs = asArray(arguments, 1);
return function(){
return func.apply(null, fixedArgs.concat(asArray(arguments)));
};
}

function compose(func1, func2) {
return function() {
return func1(func2.apply(null, arguments));
};
}

var isUndefined = partial(op["==="], undefined);
var isDefined = compose(op["!"], isUndefined);
show(isDefined(Math.PI));
show(isDefined(Math.PIE));

为什么 compose 函数不能简单地返回:

func1(func2);

并给出正确的输出。我认为存储在变量 isUndefined 中的部分函数已经返回 func.apply(null, [fixed, arguments])

var op = {
"+": function(a, b){return a + b;},
"==": function(a, b){return a == b;},
"===": function(a, b){return a === b;},
"!": function(a){return !a;}
/* and so on */
};

最佳答案

partialcompose 都是 higher-order functions .

isUn​​defined 将返回一个函数,该函数在被调用时将使用原始参数以及调用时传递的任何新参数来调用最初传递的函数。

要回答您的问题,您需要对从 partial 返回的函数调用 apply,而这又会调用 apply函数最初传递给 partial

您希望 compose 返回一个函数,该函数在被调用时将返回调用第一个函数的结果并将第二个函数作为参数传递(第二个函数将参数传递给 compose 调用)。如果 compose 返回了 func1(func2),那么您会将调用的结果分配给变量 isDefined

编辑:

现在我们有了op,让我们试着分解一下:

var isUndefined = partial(op["==="], undefined);

这相当于

var isUndefined = partial(function(a, b){return a === b;}, undefined);

isUn​​defined 被分配了一个函数,该函数在调用时将调用作为第一个参数传递给 partial 的函数,将 undefined 传递为该函数调用的第一个参数,后跟传递给函数的参数 isUn​​defined

partial(function(a, b){return a === b;}, undefined /* this will become 'a' when isUndefined is invoked */)(argumentForisUndefined /* this will become 'b' when isUndefined is invoked */);

isDefinedisUn​​defined 与另一个否定 isUn​​defined 结果的函数组合在一起。

var isDefined = compose(op["!"], isUndefined);

相当于

var isDefined = compose(function(a){return !a;}, isUndefined);

这等同于(为清楚起见重命名变量)

var isDefined = compose(

function(a){return !a;},

partial( /* partial function becomes 'a' passed to first function */
function(b, c) {
return b === c;
},
undefined /* undefined becomes 'b' passed to partial */
)

)(argumentForisDefined /* argumentForisDefined becomes 'c' passed to partial */);

如果我们看看目前为止的内容并用可读性代替,归结为一个函数,该函数接受一个参数并将其与未定义的进行比较,取反结果并返回一个 bool 值

var isDefined = function (b) { return !undefined === b; } 

关于javascript - 我正在阅读 Eloquent Javascript,我对这个部分函数示例有点困惑。请帮忙解释一下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8100354/

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