0

「term」を外部関数に渡そうとしています。

$('#item').terminal(function(command, term) {

これを行うことができた唯一の方法は、関数に「term」を渡すことです。

myfucntion(term, 'hello world');

毎回パスせずにこれを行う方法はありますか?

編集:

$(function () {
    $('#cmd').terminal(function (command, term) {
        switch (command) {
            case 'start':
                cmdtxt(term, 'hello world');
                break;

            default:
                term.echo('');
        }
    }, {
        height: 200,
        prompt: '@MQ: '
    });
});

function cmdtxt(term, t) {
    term.echo(t);
}
4

2 に答える 2

1

の宣言をcmdtxt匿名terminalコールバック内に配置できます。

$('#cmd').terminal(function (command, term) {

    // ** define cmdtxt using the in-scope `term` **
    function cmdtxt(t) {
        term.echo(t);
    }

    //...

    cmdtxt('hello world');

    //...

    }
}, { height: 200, prompt: '@MQ: ' });

cmdtxtコールバック関数内で関数を定義することによりterm、 のスコープ内に配置しcmdtxtます。これは、が定義term時にスコープ内にありcmdtxt、JavaScript では、関数の定義時にスコープ内にあるすべての変数に関数がアクセスできるためです。(コンピューター サイエンスの用語では、スコープ内の変数は、新しい関数クロージャーレキシカル スコープ内に含まれていると言います。)

ただし、この変更cmdtxtにより、そのコールバック関数の外ではアクセスできなくなることに注意してください。他の場所で関数が必要な場合は、必要cmdtxtなスコープ内でいつでも再定義できます。

于 2013-04-05T13:17:09.710 に答える
0

はい、両方の関数に対してグローバルにすることができます。

var my_store = {
   term: // what ever is term probably function(){.....}
};
$(function () {
    $('#cmd').terminal(function (command, term) {
        switch (command) {
            case 'start':
                cmdtxt('hello world');
                break;

            default:
                term.echo('');
        }
    }, {
        height: 200,
        prompt: '@MQ: '
    });
});

function cmdtxt(t) {
    my_store.term.echo(t);
}

私がそれを入れた理由my_storeは、地球空間をできるだけ汚染しないようにするためです. したがって、その役割は、グローバル スコープでアクセスされる変数を格納することです。

于 2013-04-05T13:15:48.143 に答える