javascriptカンマ()関数呼び出し
1990 ワード
コンマ演算子ですか?それともパラメータ区切りですか?
alert(5*2,4*2)//出力10.10,8の2つのパラメータを入力しますが、alertは最初のパラメータのみを使用します.
alert((5*2,4*2))//8を返します.パラメータは一つだけ入力します.
ここでalertは、カンマ演算子ではなく、2つのパラメータを受け入れます.javascriptでの呼び出し時の実数は不確定です.関数の定義の中に一つだけの参照があっても!
//////////////////////////////////////////////////////////////////////////////////////////////////////
コンマ演算子と賦値演算子
コンマ演算子は、変数や直接の量などの複雑な式または単純な式である必要があります.
表式の目的は演算値です.
ステートメントには表現文がありますが、すべてのステートメントが式ではありません.変数宣言、論理制御など.
var m=5,10//エラー(var m=5)、10;
//しかし、コンマ演算子よりも前の値演算子のため、左になるのは演算数や式ではなく、varキーワードを含む文です.
var m=+i,10//error (var m=++i)、10
m=5,10//ok var n=(++i,10)//OK
i=5*2,4*2j=(5*2,4*2)
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
解像器が大域のfunctionまたはfunction内部のfunctionキーワードを解析する場合、デフォルトではfunction宣言ではなく、function表現であると考えられます.
強制演算子()は、式のグループを変更し、演算順序を調整し、()内のものを全体として求めます.forを除いて、一つの独立した()内は演算しかできません.変数宣言ができません.
//例1.ファンクションfoo(){}foo()//例2.匿名関数は、参照によってfooRef=function(){}fooRef();/例3.引用されていない匿名関数の呼び出し方法(1)(function()/…)//.例4.引用されていない匿名関数の呼び出し方法(2)(function(){/…)()//例5.引用されていない匿名関数の呼び出し方法(3)void function(){/…』();
//例6.直接関数を使って演算子「()」を呼び出します.function()/…」()/例7.ステートメントの終端符「;」を使って、ステートメントfunction(){/…}()を実行します.
文法検査段階では、スクリプトエンジンは以下のコードを考えます.
function()//またはfunction foo(){}は関数声明であるので、ここでは具体的な名前関数と匿名関数は文法的に検出されず、後の議論もその両方に対して有効である.これは、例6および例7のコードの中で、関数の後の括弧のペアを文法的に意味しないようにする.このようにして、これらのコードは間違いなく文法的に解析されました.();/意味:例7に対する文法解釈//(略)
つまり、「function(){}」は完全な構文として解釈されているので、後に語句終了符が既に存在しているのに相当します.「();」は独立して行になって文法解釈を行い、これは間違った文法であることを示します.
//例6のコードを書き換えて、文法的に説明します.語句が文法によって解釈されたからです.(1,2)
本当にこの関数を声明の中で実行したいなら、前の小節からの例3、4、5を参考にして、関数宣言をvoidまたは括弧「(直接量の)単値式」にしてください.
alert(5*2,4*2)//出力10.10,8の2つのパラメータを入力しますが、alertは最初のパラメータのみを使用します.
alert((5*2,4*2))//8を返します.パラメータは一つだけ入力します.
ここでalertは、カンマ演算子ではなく、2つのパラメータを受け入れます.javascriptでの呼び出し時の実数は不確定です.関数の定義の中に一つだけの参照があっても!
//////////////////////////////////////////////////////////////////////////////////////////////////////
コンマ演算子と賦値演算子
コンマ演算子は、変数や直接の量などの複雑な式または単純な式である必要があります.
表式の目的は演算値です.
ステートメントには表現文がありますが、すべてのステートメントが式ではありません.変数宣言、論理制御など.
var m=5,10//エラー(var m=5)、10;
//しかし、コンマ演算子よりも前の値演算子のため、左になるのは演算数や式ではなく、varキーワードを含む文です.
var m=+i,10//error (var m=++i)、10
m=5,10//ok var n=(++i,10)//OK
i=5*2,4*2j=(5*2,4*2)
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
解像器が大域のfunctionまたはfunction内部のfunctionキーワードを解析する場合、デフォルトではfunction宣言ではなく、function表現であると考えられます.
() JS &&, ,
関数の呼び出し強制演算子()は、式のグループを変更し、演算順序を調整し、()内のものを全体として求めます.forを除いて、一つの独立した()内は演算しかできません.変数宣言ができません.
//例1.ファンクションfoo(){}foo()//例2.匿名関数は、参照によってfooRef=function(){}fooRef();/例3.引用されていない匿名関数の呼び出し方法(1)(function()/…)//.例4.引用されていない匿名関数の呼び出し方法(2)(function(){/…)()//例5.引用されていない匿名関数の呼び出し方法(3)void function(){/…』();
//例6.直接関数を使って演算子「()」を呼び出します.function()/…」()/例7.ステートメントの終端符「;」を使って、ステートメントfunction(){/…}()を実行します.
文法検査段階では、スクリプトエンジンは以下のコードを考えます.
function()//またはfunction foo(){}は関数声明であるので、ここでは具体的な名前関数と匿名関数は文法的に検出されず、後の議論もその両方に対して有効である.これは、例6および例7のコードの中で、関数の後の括弧のペアを文法的に意味しないようにする.このようにして、これらのコードは間違いなく文法的に解析されました.();/意味:例7に対する文法解釈//(略)
つまり、「function(){}」は完全な構文として解釈されているので、後に語句終了符が既に存在しているのに相当します.「();」は独立して行になって文法解釈を行い、これは間違った文法であることを示します.
//例6のコードを書き換えて、文法的に説明します.語句が文法によって解釈されたからです.(1,2)
本当にこの関数を声明の中で実行したいなら、前の小節からの例3、4、5を参考にして、関数宣言をvoidまたは括弧「(直接量の)単値式」にしてください.