5

ここでコードの一部を調べていましたhttp://cssdeck.com/labs/bjiau4dyそして、Javascriptボックスでこれを見ました-

!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!

それは何をしますか?コンソールにエラーが表示されないのはなぜですか?

ありがとう!

4

3 に答える 3

4

これらの記号はいずれも、それに続く関数を関数宣言ではなく関数式に変換します。それらをすべてまとめるのは楽しみのためだけです。


()宣言の直後に置いて通常の関数を呼び出そうとすると、次のようになります。

function () {
    // this is a syntax error...
}();

構文エラーが発生します:

SyntaxError:予期しないトークン (

関数宣言を呼び出すことができないためです。


したがって、人々は通常、無名関数を括弧で囲んで関数式に変換します。

(function () {
    // this will execute immediately
}());

これらの記号のいずれかを前に付けることで、同じことを実現できます。

!function () {
    // this will also execute immediately
}();

詳細については、こちらをご覧ください:http: //kangax.github.com/nfe/#expr-vs-decl

于 2013-02-01T04:37:52.843 に答える
0

様式的な透かしを除いて、長い記号のセットを実行することには意味がありません。

そのシンボルのセットは、後続の関数に対する操作として機能しますが、何もしません。

1JSでは、+ 1(1)または!1(false)または!+1(まだfalse)と書くことができます。これは、次の機能に作用しているものの単なる長い連鎖です。

したがって!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!1、エラーはスローされません。その価値はfalseしかしです。

そして!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!function(){ ... }、関数を実行してfalseと評価します(ただし、値は何も実行されません)

ただし何かが存在するため、関数定義を操作に変換し、関数をすぐに評価します。しかし+function(){ ... }、同じことをするだけです。

于 2013-02-01T04:45:31.090 に答える
0

もう少し詳しく説明すると、これらの各演算子は、実際にはその前にあるオペランドに対して型強制を実行します。は、演算子と同様に、+それに続くオペランドを に変換します。not 演算子であり、オペランドを(true/false)に変換します。number-!boolean

心に留めておくべきもう 1 つのことは、Javascript では、すべてが何らかの値に評価される可能性があるということです。それは「真実」または「偽」の値である可能性があり、「数値」の値を持つこともできます(その値が数値でなくても、AKA NaN)。

したがって、JSFiddle または Firebug を開いて、これらの値が関数に与える影響を調べてみると、ある種の新しい戻り値も生成されることがわかります。

例えば:

  1. !function(){}の値に評価されますfalse(関数オブジェクトをブール値に強制すると の値が得られるためtrue)。
  2. +function(){}の値に評価されますNaN(関数オブジェクトを数値に強制すると が得られるためNaN)。を使用しても同じ結果が得られ-ます。
  3. !+function(){}true を生成します (値の数を強制するNaNと生成さfalseれ、false ではなく true が生成されます。
  4. !+-+-+!function(){}yields true (なぜなら、 !function(){}yields false+falseyields 、および は、 finally が true と評価されるまで、これらすべての演算子と演算子0全体で継続するため)。+-!0
  5. 例にリストされているように演算子を適用すると、すべての演算子が評価されるまでfalse、-1、0、1の間を行き来します。true

Firebug を使用してこれらをチェックしたことに注意してください。ブラウザ間で違いがある可能性があり、おそらく Firebug が評価で示したものです。TL;DR は、Javascript が多くの型強制を行い、宣言とは異なる方法で式を評価することです。

于 2013-02-01T05:02:49.287 に答える