2017-01-05 19 views
-1

誰かがなぜこのclousureがvalueOfを呼び出すのか説明できますか?なぜ自分自身を返すときに関数trigger valueOf?

var v =() => { 
var c =() => c; 
c.valueOf =() => 1; 
return c; 
} 

v(); // 1 
v()(); // 1 
.... 
+3

コンソールに送信されますので。 'typeof v()'を試してみると、 "function"が得られます。 – RobG

+2

閉鎖が関係しているという事実は、何が起こっているかとはまったく関係がありません。 – Pointy

+0

@RobGそれは答えではありません。私は 'c.valueOf =()=> 1;'を返すことができ、valueOfも呼び出すでしょう。質問がなぜvalueOfがトリガーされるのですか? –

答えて

0

コンソールが標準化されていない、それが参考になろうと、実装に依存するホストオブジェクトだ、MDN: Consoleを参照してください。

あなたはコードを実行しましたが、結果に何をするべきかをコンソールに伝えていないので、それを自分自身の心にしています。この場合、結果にvalueOfと表示され、表示されます。他の実装は、何もしないこともあります(コードには結果がありますが、出力はありません)。明示的コンソールアラートを呼び出すため

console.log(v())またはalert(v())でそれを試してみてください、あなたは() => cを得るでしょう(一般的に)Vへの参照で渡された値が、上ののtoStringを呼び出し、そうv.toStringが呼び出され、Function.prototype.toStringに解決されます。 警告も実装に依存しますが、それはかなり簡単ですので、事実上のの動作に従う必要があります。

この場合でも、コンソールの異なる実装は、異なるオブジェクトで異なることがあります。なぜ、コンソールが特定の結果を出すのか、いくつかの検索をする理由については、たくさんの質問があります。

var v =() => { 
 
var c =() => c; 
 
c.valueOf =() => 1; 
 
return c; 
 
} 
 

 
console.log(v()); // c =() => c; 
 
alert(v());  // c =() => c; 
 
alert(v()());  // c =() => c;

関連する問題