将变量的值传递给函数参数?

时间:2012-12-20 06:56:37

标签: javascript

我将函数调用存储在变量中。

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

如何保存函数,以便将word1word2的值保存为params而不是实际变量? (所以无论是否定义了变量,我都可以在以后调用它)

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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,然后可以调用或传递它。