2

私は本でこの声明に出くわしましたが、まだ説明を見つけていません.

function foo() { return false }

alert(foo() == !foo); //message box says TRUE
alert(foo() == !foo()); //message box says FALSE

最初のアラートは FALSE になると思っていました。しかし、それは本当です(?)

最後のステートメントの括弧によって式が FALSE を返すことがわかります。ここで何が欠けているか教えてください。

4

4 に答える 4

4

fooは関数であるため、関数ではありませんfalse

function foo() { return false; };
alert(typeof foo); // function
alert(typeof foo()); // boolean
alert(!function (){}); // false
于 2013-04-24T15:02:44.040 に答える
0

最初のものfooは、関数の呼び出しではなくfoo、関数自体であり、関数が定義されているため、同等ですtrue(実際にはそうではありませんtrue)。逆さ(!)にすると になりfalseます。foo()それを(これは を返しますfalse)と比較すると、 truesince false == falseisになりtrueます。

2 つ目foo()は、関数 の関数呼び出しになり、関数fooは を返しますfalse。それを反転するとになり、それを別の呼び出し (つまり)trueと比較すると、になるため、 になります。foo()falsefalsefalse == truefalse

于 2013-04-24T15:09:59.177 に答える