私は関数型プログラミングを説明するチュートリアルに取り組んでいます。彼は私に解決策を提示するように頼んだが、うまくいきましたが、彼のソリューションは関数の.bindメソッドを使用しています。Functional Programming:クロージャの使用とバインド方法の違いは何ですか?
構文以外の解決策に違いはありますか?
function mapForEach(arr, fn) {
var newArr = [];
for(var i = 0; i < arr.length; i++){
newArr.push(fn(arr[i]));
}
return newArr;
}
var arr1 = [1,2,3,4,5];
var checkPassedLimitWithBind = function(limiter){
return function (limiter, item) {
return item >= limiter;
}.bind(this, limiter);
};
var checkPassedLimitWithClosure = function(limiter){
return function (item) {
return item >= limiter;
};
};
var notPassed3 = mapForEach(arr1, checkPassedLimitWithBind(3));
var doesNotPass3 = mapForEach(arr1, checkPassedLimitWithClosure(3));
alert(notPassed3);
alert(doesNotPass3);
例もここで見つけることができます。その関数はthis
を使用しないため https://jsfiddle.net/podbarron/73m86cj3/
'.bind()'は関数型プログラミングとは関係ありませんが(関数型プログラミングでは、言語を変更することなく '.bind()'を自分で実装できます)。 '.bind()'はオブジェクト指向プログラミングに関連し、クロージャは関数型プログラミングに関連しています。彼らは全く関係のない2つのことをします。 – slebetman
ありがとう。 – pk36