JavaScript函数:这是做什么的?
我一直在看这段代码,试图理解它的作用,但我真的无法理解它。我需要帮助理解这个函数的实际功能JavaScript函数:这是做什么的?,javascript,function,Javascript,Function,我一直在看这段代码,试图理解它的作用,但我真的无法理解它。我需要帮助理解这个函数的实际功能 function element(array, gen) { if(gen === undefined) { gen = fromTo( 0, array.length ); } return function() { var index = gen(); if(index !== undefined) { return ar
function element(array, gen) {
if(gen === undefined) {
gen = fromTo(
0,
array.length
);
}
return function() {
var index = gen();
if(index !== undefined) {
return array[index];
}
};
}
元素
不是javascript内置元素,这意味着它必须在其他地方定义。如果不知道它的功能,就不可能确切地说出发生了什么,但我可以告诉你
concat
接受n个相同类型的参数。在不知道元素是什么的情况下,我无法告诉您这是什么类型的,但它可以根据您需要的数量来提供。这就是spread操作符…
告诉您的
它返回一个接受0个参数的函数。调用时,它会继续调用自身,检查gen()
的返回值是否已定义,如果未定义,它会将gen更改为next()
的返回值,并再次调用gen()
。它重复此过程,直到定义了gen()
的返回值,然后返回该值
使用它看起来像这样
var recur=concat(a,b,c,d,e);//可以接受任意数量的相同类型的参数
var someValue=recur();//调用自身,直到有值返回为止
console.log(someValue);//使用值
元素的作用是什么?您的示例代码中没有定义它。您不了解哪些部分?@djfdev它不重要。从代码的其余部分可以看出,它是一个带有签名(Typescript)元素(args:T[])=>()=>(()=>U|void)|void代码>我们不关心t
和U
的类型,因为这段代码中没有其他内容关心@Atoms,您可以将其重写为函数concat(…gens){var next=element(gens),gen;return function(){while(gen=next()){var value=gen if(value!==undefined)return value;}
我真傻。我甚至不知道如何正确地提问。我编辑了代码以携带元素函数,所以你怎么能在不知道的情况下回答它?;)因为我了解递归函数和javascript操作的基础知识。我不能确切地告诉你它在做什么并不意味着我不能告诉你它的递归函数自然。该操作是vauge;在这种情况下,我提供了我能提供的最佳答案。可能对其他遇到类似外观函数的人仍有帮助。我已编辑了代码以承载元素函数。请更新您的答案以便更好地理解
function concat(...gens) {
var next = element(gens),
gen = next();
return function recur() {
var value = gen();
if(value === undefined) {
gen = next();
if(gen !== undefined) {
return recur();
}
}
return value;
};
}