2

関数(それ自体にパラメーターがあるとしましょうpara)をパラメーターとして別の関数関数b()に渡し、パラメーターparaを取得する方法。

ここに簡単な例があります

<input type="button" onclick="sometest3()" value="Run test">

<script>
function sometest3() {

    // pass an anonymous function as a parameter which has
    // its own parameter "client"
    sometest('connection',function(client){client.getInfo();}) 
}


function sometest(eve,func) {

     // get this function's parameter which is "client" and pass
     // a reference of sometest2 to it. so in the callback I can use
     client.getInfo(); 
}


function sometest2() {
   this.getInfo=function (){alert("get it");};
}
</script>
4

2 に答える 2

0

投稿したコードを指定することはできません。渡された無名関数はsometest、そのスコープ外の関数にアクセスできないローカル変数として保持されます。

sometestアクセスしたい場合はclient、それを渡す必要があります。以下はローカル変数を使用します。

function sometest3() {

    var client = {getInfo: function(){ /* whatever */}};

    sometest('connection', function(client){client.getInfo();}, client);
}


function sometest(eve, func, client) {

    // The client object has been passed from sometest3
    func(client);

}

または、クロージャまたはグローバル変数の両方の関数、または両方の関数にアクセス可能なオブジェクトのプロパティ(基本的にこれらは同じもの)で使用できるようにすることもできます。あなたの選択。

例:クロージャーの使用:

var foo = (function() {
    var client = {getInfo: function(){ /* whatever */}};
    return {
        sometest3: function() {
            foo.sometest('connection', function(obj){obj.getInfo();}, client);
        },

        sometest: function(eve, func, client) {
            // The client object has been passed from sometest3
            func(client);
        }
    };
}());

次に、それをと呼びますfoo.sometest3()

編集

通話を追加

于 2012-06-04T07:26:56.030 に答える
0

関数で名前が付けられている引数の数を知りたい場合は、funcを確認できfunc.lengthます。もちろん、これはその関数に多かれ少なかれ引数を渡すことができないという意味ではありませんが、ローカル スコープ変数に格納されている引数の数だけです。

しかし、これらの変数の名前を知りたい場合は、関数を文字列に変換して宣言を取得するのが最善の方法です。

var parms = String(func)
        .match(/function[^\(]*\(([^\)]*)/)[1]
        .split(/\s*,\s*/);

(キーワードとその宣言の間にコメントを入れるfunctionと、このメソッドが混乱する可能性があることに注意してください。)

そうは言っても、これがあなたにとってどのように役立つかわかりません...

于 2012-06-04T07:31:03.437 に答える