![](/img/trans.png)
[英]Why is my already-defined global variable being overwritten by another var statement in IE8?
[英]Assign an already-defined function to a variable with set arguments
我想要与该代码等效的东西,除了我不希望在定义my_var时调用my_func。 我想稍后在代码中调用my_var()并保留原始参数(“被叫!”)。
function my_func(first_arg) {
alert(first_arg);
};
var my_var = my_func('called!');
怎么样?
变量初始化后将调用您的函数(然后变量将保留函数的输出 ,这不是您想要的)。 为什么不制作另一个函数来返回函数的输出呢?
我不善于解释事物,因此下面是一些代码:
var my_var = function() { return my_func('called!'); };
实现此目的的直接方法是使用无参数匿名函数包装对函数的调用:
var my_var = new function() {
my_func('called!');
}
ECMAScript 5th Edition引入了Function.bind
方法,该方法实现了部分应用程序(或更具体地说,是currying ),您可以通过以下方式编写该方法:
var my_var = my_func.bind(undefined, 'called!');
(存在undefined
位置,因为bind()
的第一个参数bind()
值绑定this
“参数”。)
Function.bind()
是相对较新的,尚未广泛实现。 Mozilla文档包含一个简单的填充程序,您可以使用它来获取大部分功能。 John Resig也有一篇博客文章,其中介绍了部分应用程序的不同实现。 它也可能在许多JS库之一中提供。
您可能正在寻找类似于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"
它不在较旧的浏览器中,但是上面的链接具有兼容性实现,使其可以在特定情况下使用。
新增功能!
function my_func(first_arg) {
alert(first_arg);
};
var my_var = function() {
my_func('called!');
}
只需要函数返回一个函数:
function my_func(first_arg) {
return function(){alert(first_arg);}
};
var my_var = my_func('called!');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.