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'时,变量是未定义的:

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

如何保存函数,以便保存 和 的值,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

在撰写本文时无法准确说出您的问题的去向,但您可以关闭闭包返回函数中的两个参数,如下所示:

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 回答