将已定义的函数分配给具有set参数的变量

时间:2011-10-19 23:28:12

标签: javascript

我想要一些与此代码等效的东西,除了我不希望在定义my_var时调用my_func。我想稍后在代码中调用my_var()并保留原始参数('called!')。

function my_func(first_arg) {
alert(first_arg);
};
var my_var = my_func('called!');

如何?

5 个答案:

答案 0 :(得分:2)

初始化变量时将调用您的函数(然后变量将保存函数的输出,这不是您想要的)。为什么不再创建一个返回函数输出的函数?

我不善于解释事情,所以这里有一些代码可以盯着:

var my_var = function() { return my_func('called!'); };

答案 1 :(得分:1)

实现这一点的直接方法是使用无参数匿名函数包装对函数的调用:

var my_var = new function() {
    my_func('called!');
}

ECMAScript第5版引入了实现部分应用程序的Function.bind方法(或者更具体地说是 currying ),可以通过以下方式编写它:

var my_var = my_func.bind(undefined, 'called!');

undefined因为bind()的第一个参数将值绑定到this“参数”。)

Function.bind()是相对较新的,并未得到广泛实施。 Mozilla文档包含一个简单的垫片,可用于获取大部分功能。 John Resig还有a blog post具有不同的部分应用程序实现。它也可以在许多JS库中的一个中使用。

答案 2 :(得分:1)

您可能正在寻找类似Function.prototype.bind的内容,它允许您将函数与特定上下文的参数绑定。基本上,它允许您这样做:

function myFunc(firstArg, secondArg) {
    alert(firstArg + secondArg);
};

var myVar = myFunc.bind(null, 'called!');

myVar(' - from myVar!');
// result is alert with -> "called! - from myVar"

它不在旧版浏览器中,但上面的链接具有兼容性实现,使其适用于此特定方案。

答案 3 :(得分:0)

制作新功能!

function my_func(first_arg) {
    alert(first_arg);
};
var my_var = function() {
    my_func('called!');
}

答案 4 :(得分:0)

只需要函数返回一个函数:

function my_func(first_arg) {
  return function(){alert(first_arg);}
};
var my_var = my_func('called!');