誰かがなぜこのclousureがvalueOfを呼び出すのか説明できますか?なぜ自分自身を返すときに関数trigger valueOf?
var v =() => {
var c =() => c;
c.valueOf =() => 1;
return c;
}
v(); // 1
v()(); // 1
....
誰かがなぜこのclousureがvalueOfを呼び出すのか説明できますか?なぜ自分自身を返すときに関数trigger valueOf?
var v =() => {
var c =() => c;
c.valueOf =() => 1;
return c;
}
v(); // 1
v()(); // 1
....
コンソールが標準化されていない、それが参考になろうと、実装に依存するホストオブジェクトだ、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;
コンソールに送信されますので。 'typeof v()'を試してみると、 "function"が得られます。 – RobG
閉鎖が関係しているという事実は、何が起こっているかとはまったく関係がありません。 – Pointy
@RobGそれは答えではありません。私は 'c.valueOf =()=> 1;'を返すことができ、valueOfも呼び出すでしょう。質問がなぜvalueOfがトリガーされるのですか? –