如何在匿名函数中执行从1到10的数字而不循环?

时间:2017-02-28 04:32:20

标签: javascript function anonymous-function

这是功能,但执行时这只给了我一次。



(function(n, m) {
  // body...
  if (n <= m) {
    console.log(n);
    n++;
    (n, m);
  }
})(1, 10);
&#13;
&#13;
&#13;

6 个答案:

答案 0 :(得分:2)

您无法递归调用匿名函数;你必须给它一个名字(在这种情况下它不再被视为匿名&#39;):

&#13;
&#13;
(function name(n, m) {
  // body...
  if (n <= m) {
    console.log(n);
    n++;
    name(n, m);
  }
})(1, 10);
&#13;
&#13;
&#13;

答案 1 :(得分:1)

您可以使用arguments.callee返回被称为函数的定义

&#13;
&#13;
(function(n, m) {
  // body...
  if (n <= m) {
    console.log(n);
    n++;
    arguments.callee(n, m);
  }
})(1, 10);
&#13;
&#13;
&#13;

如果执行此操作,则会看到日志

&#13;
&#13;
(function(n, m) {
  // body...
  if (n <= m) {
    console.log(n);
    n++;
    console.log(arguments.callee);
  }
})(1, 10);
&#13;
&#13;
&#13;

arguments是内置数组,就像对象不完全数组一样,由java脚本本身注入,它保存有关参数传递给函数的信息等等......检查this

答案 2 :(得分:0)

你没有循环。给函数和调用命名。

&#13;
&#13;
(function test(n,m) {
        // body...
        if (n<=m) {
            console.log(n);
            n++;
            test(n,m);
        }
    })(1,10);
&#13;
&#13;
&#13;

答案 3 :(得分:0)

这是一个没有“循环”的匿名函数,并将数字n显示为m

(function(n, m) {
  Array.from({length:m}, (v,i) => console.log(i + n));
})(1, 10);

答案 4 :(得分:0)

只需使用while

即可

&#13;
&#13;
(function(n, m) {
  // body...
  while (n <= m) {
    console.log(n);
    n++;
    (n, m);
  }
})(1, 10);
&#13;
&#13;
&#13;

答案 5 :(得分:0)

为什么你不想使用循环

   (function(n, m) {
      // body...
      while (n <= m) {
        console.log(n);
        n++;
        (n, m);
      }
    })(1, 10);

Loop始终优于recursive function

1) - 当调用recursive function时,该函数位于堆栈的顶部,所以如果recursive function在某个时刻超过堆栈大小,它将给你一个错误,({ {1}}),为避免此运行时错误,请始终使用循环而不是Stack Overflow or Stack size exceeded