如果不使用for或while循环,如何编写一个函数在JavaScript中第n次调用另一个函数?

如果不使用for或while循环,如何编写一个函数在JavaScript中第n次调用另一个函数?,javascript,function,Javascript,Function,我是新的编码,我遇到了一个障碍,我似乎无法找到答案。。。我正在尝试编写一个函数,它将调用另一个函数n次。我知道处理这种数据类型比处理数字或字符串更困难 console.group("3 Times"); var hello = function(){ console.log("Hello World!"); } function call3Times(func) { func(); func(); func(); } function nthTimes(n

我是新的编码,我遇到了一个障碍,我似乎无法找到答案。。。我正在尝试编写一个函数,它将调用另一个函数n次。我知道处理这种数据类型比处理数字或字符串更困难

console.group("3 Times");
var hello = function(){
    console.log("Hello World!");
}
function call3Times(func) { 
    func(); 
    func(); 
    func(); 
}
function nthTimes(n, func){
    var hello = func;
    var nthHello = console.log(hello.repeat(n));
   return nthHello
}
call3Times(hello);
nthTimes(5, hello());
console.groupEnd();

因此,我一直认为,repeat不能在未定义的变量上运行。我知道,在这种情况下,函数不是引用变量,而是引用它将作为引用的函数本身。那么我该如何解决这个问题呢?

首先,欢迎来到这个网站,欢迎来到编程

你会想看看一个叫a的东西。它们是编程中的实用程序,允许您重复一行或几行代码,直到满足特定条件

例如,在您的场景中,您可以编写

function nthTimes(n, func){
    for (var i = 0; i < n; i++) {
      func();
    }
}

我有一个不断重写的函数,名为
times
(基于旧函数)。听起来它能满足你的要求

function toPosInt(number) {
    return Math.floor(Math.abs(number));
}

function times(number, handler, context) {

    let posInt = toPosInt(number) || 0;
    let i = 0;

    while (i < posInt) {

        handler.call(context, i);
        i += 1;

    }

    return posInt;

}
var hello=function(){
log(“你好,世界!”);
}
函数n次(n,func){
for(设i=0;i
解释


n次(5,hello())这样做实际上是执行hello函数,并将hello函数返回的值传递给第n次。相反,尝试此
n次(5,hello)
通过这种方式,您只需传递对hello函数的引用,稍后可以使用
func()

调用该函数。有许多方法可以成功地重现您希望达到的效果

我的答覆如下:

  • 使用
    ES2015+
    语法编写(“新”版本的javascript);及
  • 使用
    回调
    (这是对作为参数传递给另一个函数的函数的引用(即,第二个函数能够访问第一个函数)
//我想稍后调用的函数
常量logHelloWorld=()=>{
log('helloworld!');
}
//我的主要职能
const runFunctionRepeatedly=(回调,numberOfTimes)=>{
for(设i=0;i
根据以下内容:

repeat()方法构造并返回一个新字符串,该字符串包含调用它的字符串的指定数量的副本,并连接在一起

这意味着它与
String
对象一起使用,它将获取一个字符串并重复
n
次,将结果存储为String

下面是使用.repeat()函数的示例:

var hello = "Hello World";

var repeated = hello.repeat(5);

console.log(repeated);
//expected output: > "Hello WorldHello WorldHello WorldHello WorldHello World"
请注意,每个重复的
hello
之间没有空格-这是因为
hello
的末尾没有空格,并且它完全重复

要多次重复函数,可以使用For循环:

function nthTimes(n, func) {
  for (var i = 0; i < n; i++) {
    func(); 
  }
}

function hello() {
console.log("Hello World");
}

nthTimes(5, hello);
//expected output: > "Hello World" > "Hello World" > "Hello World" > "Hello World" > "Hello World"
函数n次(n,func){
对于(变量i=0;i“Hello World”>“Hello World”>“Hello World”>“Hello World”>“Hello World”
正如其他人所指出的:

  • for
    循环是一个不错的选择。但是,在评论中您提到不应该使用
    for
    循环。在这种情况下,您可以使用递归
  • 函数没有
    repeat
    方法
  • 您使用错误的第二个参数调用了第n次
    hello
    方法:它应该是
    hello
    (函数对象),而不是一个
    hello()
    执行的返回值:因此,没有括号:

    nthTimes(5, hello);
    
函数n次(n,func){

如果(n/@Dayman3030)这就是你想要实现的目标吗

console.group("3 Times");

var hello = function(){
    return "Hello World! ";
}

function call3Times(n=3, func) { 
    for (var i = 0; i < n; i++) {
      console.log(func());
 }
}

function nthTimes(n=3, func){
    var hello = func();
    var nthHello = hello.repeat(n);
    return console.log(nthHello);
}

call3Times(5, hello);
nthTimes(5, hello);
console.groupEnd();
console.group(“3次”);
var hello=function(){
返回“你好,世界!”;
}
函数调用3次(n=3,func){
对于(变量i=0;i
nthTimes(5,hello());
这样做实际上是执行
hello
函数,并将hello函数返回的值传递给
nthTimes
。相反,请尝试此
nthTimes(5,hello);
这样,您只传递了对hello函数的引用,以后可以使用
func()调用该函数在提交代码之前,请考虑测试代码,特别是如果你不打算提供任何上下文!):正如@ TylerRoper所说,你应该包括对代码的一些解释,而不仅仅是代码本身。另外,因为你使用了<代码> NthTimes(5,Heloor())。;
您将传递
hello
函数的结果,而不是对该函数的引用。@Tyerroper我在上面的注释中提供了解释,但忘了在这里传递。我错过了最后一部分,您可以编辑它。@MickelsonMichael我对问题做了注释,只是忘了在这里添加它。关于错误,ye啊,我从问题中复制时忘了删除它。很抱歉,我编辑了它。@没有别人的明确许可,无量纲地编辑别人的代码几乎从来都不是一个好主意,不管你在更改什么。如果你编辑你的答案以包含上面的评论,我将删除我的反对票。我知道你在说什么,这会让我感到惊讶完全有意义,但除非特别要求,否则作业要求无for或while循环。哦,您的问题中没有提到这一点。请更新您的问题(单击其下方的编辑链接),并添加此信息和任何其他约束。我已更新了我的问题,因此它不会对
循环使用
。感谢并抱歉造成混淆。我现在将编辑该问题
nthTimes(5, hello);
console.group("3 Times");

var hello = function(){
    return "Hello World! ";
}

function call3Times(n=3, func) { 
    for (var i = 0; i < n; i++) {
      console.log(func());
 }
}

function nthTimes(n=3, func){
    var hello = func();
    var nthHello = hello.repeat(n);
    return console.log(nthHello);
}

call3Times(5, hello);
nthTimes(5, hello);
console.groupEnd();