我想要一些与此代码等效的东西,除了我不希望在定义my_var时调用my_func。我想稍后在代码中调用my_var()并保留原始参数('called!')。
function my_func(first_arg) {
alert(first_arg);
};
var my_var = my_func('called!');
如何?
答案 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!');