上記の例で何が起こっているかを考える 1 つの方法を次に示します。
var myFunc = function(){
console.log("This gets fired immediately");
var randomNumber = Math.ceil(Math.random()*10);
return function() {
return randomNumber;
}
}
var a = myFunc(); //Console log fires IMMEDIATELY, a is the returned function
a(); //some integer from 1 to 10
変数に割り当てると myFunc が呼び出されるため、console.log がすぐに起動します。componentDidMount が発生するとすぐにリスナーを「オン」にします。
componentDidMount ライフサイクル メソッドでは、.listenを使用してリスナーをアタッチしています。それが呼び出されます。便宜上、関数の結果を this.unsubscribe に割り当てています。
この要点 ( https://gist.github.com/spoike/ba561727a3f133b942dc#file-reflux-js-L60-L68 ) の 60 ~ 68 行目を見ると、イベント リスナーを削除する関数を返す .listen を考えてみてください。
componentWillUnmount で、リスナーを削除する this.unsubscribe を呼び出します。.listen は「リスナー」を削除する関数を返すと考えることができ、componentWillUnmount ライフサイクルが発生すると、その関数を呼び出してリスナーを強制終了します。
Tl;dr: .listen がリスナーをアタッチし、リスナーをオフにする関数を返すと想像してください。最初にリスナーを呼び出すと、返された関数を呼び出すと、リスナーがオフになります。