1

私はJqueryを学び始めましたが、関数パラメーターを理解するのに問題があります:(最初のコードを見て実行すると:スクリプトは(パラメーターなしで)機能します。2番目のコード(パラメーター付き)を見て実行すると:2番目のスクリプトも機能します!!最初の質問:2番目のスクリプトでパラメーターを正しく設定しましたか? 2番目の質問:パラメーターが設定されているか、関数に 正しく渡されているか を確認するにはどうすればよいですか? PSNOOBになりありがとうございます!!




   //First code (WITHOUT PARAMETERS!!!) 
   $(document).ready(function () {
       var addclass = $('p:first');

       function AddClass() {
           addclass.addClass('first');
           if (addclass.is($('.first'))) {
               alert('here');
           }
           else {
               alert('not here');
           }
       }
       $('.button').click(function () {
           AddClass(addclass);
       });
   });
   //Second code (WITH PARAMETERS)
   $(document).ready(function () {
       var addclass = $('p:first');

       function AddClass(addclass) {
           addclass.addClass('first');
           if (addclass.is($('.first'))) {
               alert('here');
           }
           else {
               alert('not here');
           }
       }
       $('.button').click(function () {
           AddClass(addclass);
       });
   });
4

2 に答える 2

2

2番目の引数は正しく、関数に渡された引数をチェックするには、次を使用します。

arguments.length

例えば:

function myfunc() {
   alert( arguments.length ); //output: 1, because you passed one argument

   // and to get that

   var myarg = arguments[0];
}

myfunc(someVar);

引数を渡さない場合は、次のようにします。

function myfunc() {
   alert( arguments.length ); //output: 0, because you passed no argument
}

myfunc();

あなたの機能のために:

  function AddClass(addclass) {

                      ^-- declaring addclass is not necessary if you use like following

       // checking for argument

       if( arguments.length ) {
         // arguments[0] will give you addclass
         // you may not write addclass to function like above
       }

       addclass.addClass('first');
       if (addclass.is($('.first'))) {
           alert('here');
       }
       else {
           alert('not here');
       }
   }

引数を使用して関数を呼び出すaddclass

   $('.button').click(function () {
       AddClass(addclass);
   });
于 2012-07-02T16:05:38.920 に答える
0

はい、2番目の関数に引数を正しく渡しました。関数に渡された引数を確認するには、次の2つの方法で引数を確認できます。

配列表記を個別に使用

function AddClass(addClass) {
    console.log(arguments[0]); // This will show you the first parameter
    // Some code...
}

jQuery関数を使用$.each();

function AddClass(addClass) {
    $.each(arguments, function (key, value) {
        console.log(value); // Output the value of all of your arguments
    });
}

この場合、関数AddClassでアクセスおよび変更するaddClass変数は同じスコープ内にあるため、パラメーターを渡すかどうかは関係ありません。

この投稿JavaScriptVariableScopeを参照して、実際のコードで何が起こっているのか、およびコードの2つのサンプルが正しく機能する理由を理解する必要があります。

于 2012-07-02T16:30:14.707 に答える