Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript函数:这是做什么的?_Javascript_Function - Fatal编程技术网

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;
    };
}