首页 > 解决方案 > 访问用作另一个函数的参数的函数

问题描述

我不确定如何解释这个问题,但我会尽力而为。目前,我正在处理 codewars 上的“默认参数”kata。这涉及创建一个函数“defaultArguments”,该函数可以将另一个函数作为参数,以及一个具有要使用的默认值的对象。然后将此函数设置为等于一个变量,然后使用其他参数调用该变量。基本上,这个想法是如果函数调用没有提供参数,则使用默认参数。但是,存在参数时不使用默认参数。因此,在这个 kata 上提供的测试如下:

function add(a,b) { return a+b; }
var add_ = defaultArguments(add,{b:9});
Test.assertEquals(add_(10), 19);
Test.assertEquals(add_(10,5), 15);
var add_ = defaultArguments(add_,{b:3});
Test.assertEquals(add_(10), 13);

我设法创建了一段代码,当提供类似于“添加”函数的函数时,该代码将正确运行。但是,我现在遇到下面的函数并且我的代码失败了。

var closure_counter = (function accumulator() { var counter = 0; return function (x) { return counter += x; }; })();

我认为这个 'closure_counter' 然后像以前一样传递给 defaultArguments 函数。

但是,以前面的“add”函数为例,我程序的第一阶段是将函数参数转换为字符串:

function_string = func.toString();

然后用这个字符串来基本隔离需要运行的代码。在“添加”示例中,这将 console.log 以下内容:

FUNCTION STRING: function add(a,b) { return a+b; }

然后,我将使用以下方法将其与其他信息一起返回:

let new_function = new Function():

我的程序的其余部分将运行。问题似乎是当我遇到上面的'closure_counter'函数时。当我使用相同的 func.toString() 和 console.log() 时,我的输出是这样的:

FUNCTION STRING: function (x) { return counter += x; }

所以它基本上错过了函数的第一部分,其中包括变量计数器的声明。这是执行我的代码所必需的。

基本上,以后有没有办法在我的代码中访问这个变量,或者将它传递给 func.toString() 以便我可以隔离我需要的变量?

如果不清楚,谢谢并道歉!

标签: javascriptfunctionnested

解决方案


推荐阅读