为什么在这个Javascript示例中需要调用?

时间:2014-01-28 04:00:36

标签: javascript

这是问题(在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)?后者仅在某些情况下有效。没有电话,“这个”默认为什么?

3 个答案:

答案 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 变量,以便进入链中的下一步。您会在PythonRuby代码中看到很多内容。

您设置this的原因是因为this将等于parent window,您知道可以在该特定variable内找到下一个parameter

简单示例: 这有点像尝试在另一个variable中呼叫function。如果没先定义scope,就行不通。

相关问题