[英]Pass a closure with function.apply
考虑带参数的函数:
function add1(a, b) { return a + b; }
我们可以使用例如add1.apply(window, [1, 2])
调用add1
并获得结果3
考虑使用this
函数:
function add2() { return this.a + this.b; }
我们可以使用add2.apply({a: 1, b: 2}, null)
调用add2
并获得结果3
考虑一个(不那么好)的功能:
function add3() { return a + b; }
有没有办法可以调用这个函数并传递一个包含a
和b
值的闭包?
请注意,在全局范围内创建a
和b
不是可接受的解决方案(例如window.a=1; window.b=2; add3();
)
我认为将参数声明为a和b的想法是将这些变量设置在函数体中。 所以你不需要这样做
function add_ab() {
var a = arguments[0];
var b = arguments[1];
return a + b;
}
或以Perl风格完成:
function add_ab() {
var args = Array.slice(arguments);
var a = args.shift();
var b = args.shift();
return a + b;
}
通常,如果您不知道参数的数量,则可以只传递一个类型为array的参数,以便可以在数组中添加所有数字。
拜托你们吧。 Javascript是一种动态语言,所以几乎任何事情都是可能的:
function add3() { return a + b; }
(function notGlobalScope() {
var a = 1;
var b = 2;
var funcBody = "var a="+ a +", b="+ b +";\n"+
add3.toString() +"\n"+
"add3()";
console.log(eval(funcBody));
})()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.