繁体   English   中英

用function.apply传递一个闭包

[英]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; }

有没有办法可以调用这个函数并传递一个包含ab值的闭包?

请注意,在全局范围内创建ab不是可接受的解决方案(例如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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM