我不确定如何解释此问题,但我会尽力而为。 目前,我正在处理代码战中的“默认参数”选项卡。这涉及创建一个函数“ 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()中,以便我可以隔离所需的变量?
如果不清楚,表示感谢和歉意!