这是问题(在codewars.com上称为“Compose functions(T Combinator)”,如果你想在原始环境中试用它):
让我们创建一个名为compose的函数,它接受一个值作为参数,以及任意数量的函数作为附加参数。
该函数将返回由第一个参数产生的值,该参数依次用作所有接受的函数参数的参数。如果只传入一个参数,则返回该参数。
所以:
var doubleTheValue = function(val) { return val * 2; }
var addOneToTheValue = function(val) { return val + 1; }
compose(5, doubleTheValue) // should === 10
compose(5, doubleTheValue, addOneToTheValue) // should === 11
以下是可能的解决方案之一:
var compose = function(initialValue) {
var functions = Array.prototype.slice.call(arguments, 1);
return functions.reduce(function(previousResult, func){
return func.call(this, previousResult);
}, initialValue);
}
为什么我们需要返回func.call(this,previousResult)而不仅仅是func(previousResult)?后者仅在某些情况下有效。没有电话,“这个”默认为什么?
答案 0 :(得分:2)
为什么我们需要返回
func.call(this, previousResult)
而不仅仅是func(previousResult)
?
我们不是真的。 this
不是compose
函数的this
value(作者可能想要的),而是reduce
回调的is specified Why is "this" in an anonymous function undefined when using strict? {{3}} undefined
1}}。
没有通话,“此”默认为什么?
undefined
,请参阅{{3}}。
答案 1 :(得分:0)
在严格模式下,this
将为undefined
,因为没有调用上下文。
在非严格的Javascript中,它将是全局对象(浏览器中的window
)。
答案 2 :(得分:0)
为什么我们需要返回func.call(this,previousResult)而不仅仅是func(previousResult)?
this
默认为我们的window
。基本上,我们给它一个secondary value
,以便进一步推进我们的发展。
如果您只是致电previousResult
,则JS
不知道在哪里寻找这样的事情。如果您之前没有拨打window
,则会引用parameter
。这在大多数 OOP语言中非常常见。如果没有进一步定义您想要的内容window
,则无法查找 IN IN window
的值。
基本上,我们只是提供一个 bogus 变量,以便进入链中的下一步。您会在Python
和Ruby
代码中看到很多内容。
您设置this
的原因是因为this
将等于parent window
,您知道可以在该特定variable
内找到下一个parameter
。
简单示例:
这有点像尝试在另一个variable
中呼叫function
。如果没先定义scope
,就行不通。