【发布时间】:2017-05-30 13:41:05
【问题描述】:
我是 Javascript 的新手。我遇到了以下问题。
如here 所述,几乎所有 ES5 数组函数(forEach、map、filter、every、some)都可以采用额外的第二个参数。
如果它指定函数被调用,就好像它是第二个参数的方法一样。也就是说,您传递的第二个参数成为您传递的函数内的 this 关键字的值。
array.forEach(function(currentValue, index, arr), thisValue)
array.map(function(currentValue, index, arr), thisValue)
相反:
array.reduce(callback, [initialValue])
array.reduceRight(callback, [initialValue])
请注意,reduce() 和 reduceRight() 都不接受可选参数,该参数指定要调用归约函数的 this 值。如果您需要将归约函数作为特定对象的方法调用,请参阅 Function.bind() 方法。
这是什么意思:“作为特定对象的方法被调用”?谁能提供一些示例它如何影响我的代码?
提前致谢。
【问题讨论】:
-
作为 functional 语言的 javascript 重要特性之一是您可以将函数作为参数(又名,
callbacks)传递给包装函数(又名,higher order function) 和这些回调的context(aka,this关键字) 很难推理,因为你永远不知道何时何地 (尽管很多时间由像window这样的全局对象拥有浏览器)它们将被调用,因此如果您在这些回调中使用this,Function.bind是“固定”回调上下文的好方法,而arrow function自动绑定到封闭上下文。
标签: javascript arrays scope