1

関数呼び出しを変数に格納しています。

var snippet = function { alert('a') };
snippet.call(); // Displays an alert

私の問題は、関数のパラメータとして変数を渡す必要があることです。

var snippet;
function() {
   var word1 = 'hello';
   var word2 = ' world';
   snippet = function() { alert( word1 + word2 ); };
}

そして、「スニペット」を呼び出すと、変数は未定義です。

snippet.call(); // Cannot read property 'x' of undefined

関数を保存して、実際の変数ではなくparamsの値を保存するにはどうすればよいword1ですか?word2(したがって、変数が定義されているかどうかに関係なく、後で呼び出すことができます)

4

2 に答える 2

2

これでうまくいくはずです:

var snippet = function ( word1, word2 ) {
  alert ( word1 + word2 );
};

snippet ( "foo", "bar" );
// or
snippet.call ( ctx, "foo", "bar" ); // where `ctx` is the context you wish to use

関数の詳細call(): https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/call

于 2012-12-20T07:00:59.720 に答える
1

執筆時点では質問がどこに向かっているのか正確にはわかりませんでしたが、次のように、関数を返すクロージャで 2 つの引数を閉じることができました。

var snippet = function (word1, word2) {
   return function() { alert( word1 + word2 ); };
};

snippet('hello', 'world').call();

snippest('hello', 'word')クロージャーを返します。これを呼び出したり渡したりできます。クロージャーをすぐに作成して、少し短いものを作成することもできます。

var snippet = function(word1, word2) {
    return function() {
        alert(word1 + word2);
    };
}('hello', 'world');

snippet.call();

これは前と同じですが、外側の関数がすぐに呼び出され、結果として割り当てられたクロージャsnippetが呼び出されたり渡されたりします。

于 2012-12-20T07:13:13.090 に答える