f.toString(呼び出さずに)が同じ関数の返された結果をどのように評価するのかわかりませんか?
function f(a){
console.log(a + a);
f.toString = function(){return a};// this part is
//confusing.
return f;
};
f(10) // 20
f(10)(20)// 20 40
f.toString(呼び出さずに)が同じ関数の返された結果をどのように評価するのかわかりませんか?
function f(a){
console.log(a + a);
f.toString = function(){return a};// this part is
//confusing.
return f;
};
f(10) // 20
f(10)(20)// 20 40
文字列コンテキストでオブジェクトを使用しようとすると、そのtoString()
メソッドを呼び出すことによってオブジェクトが文字列に変換されます。
仕様の48ページを参照してください
実際f.toString
、シナリオでは呼び出されません。この行を削除すると、結果は同じになります。
f.toString()
実行しようとすると呼び出されますconsole.log(f);
あなたの結果は説明しました:
f(10) // 20
関数f
は引数を指定して呼び出され10
、コンソールに出力されますconsole.log(10 + 10);
f(10)(20) // 20 40
最初の部分は上記と同じですが、f
関数もそれ自体を返しますreturn f;
。これは、2番目の部分(20)
が同じ関数の呼び出しとしてもう一度扱われ、出力されることを意味します。console.log(20 + 20);