0

我正在尝试将“术语”传递给外部函数。

$('#item').terminal(function(command, 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 回答