考虑带参数的函数:
function add1(a, b) { return a + b; }
我们可以使用例如add1
来调用add1.apply(window, [1, 2])
并获取结果3
使用this
来考虑函数:
function add2() { return this.a + this.b; }
我们可以使用add2
致电add2.apply({a: 1, b: 2}, null)
并获取结果3
考虑一个(不太好)的功能:
function add3() { return a + b; }
我们有什么办法可以调用此函数并传递包含a
和b
值的闭包吗?
请注意,在全局范围内创建a
和b
不是可接受的解决方案(例如window.a=1; window.b=2; add3();
)
答案 0 :(得分:1)
我认为将参数声明为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的参数,这样就可以在数组中添加所有数字。
答案 1 :(得分:1)
来吧,伙计们。 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));
})()