手动调用匿名 JS 函数

Manually invoking anonymous JS function

本文关键字:JS 函数 调用      更新时间:2023-09-26

我在CodePen上发现了很多生成JavaScript的五彩纸屑。它由一个简单的调用:

(function() {
    // Confetti code here
}).call(this);

工作得很好,但我希望在某个时候手动调用它。

我尝试将其放置在函数中,如下所示(删除上面的两个换行(:

function confetti() {
   // Confetti code here
}

然后调用该函数,但什么也没发生。看不出为什么。有问题的代码可以在这里看到:http://codepen.io/linrock/pen/Amdhr

更新

看来我的代码被很好地触发了。它与它是一个匿名函数完全无关。出于某种原因,它只有在调整浏览器大小时才会复活——这完全是另一个问题。奇怪。

现在不知道这个问题该怎么做——这里的解决方案与实际问题无关。(所描述的问题从一开始就不存在:-/(

你很接近,你展示的尝试只是没有调用它;

function confetti() {
   // pass
}
confetti.call(this);

但是,由于您想在其他地方使用它,我不会假设this会是一样的,所以我会写

var confetti = (function () {
    // pass
}).bind(this);
confetti();
您可以在此处阅读

有关call的文档,在此处阅读bind

允许您触发动画的函数称为 step 。你只需要从代码中删除它的调用。因此,与其拥有:

window.step = function() {
    var c, j, len, results;
    requestAnimationFrame(step);
    context.clearRect(0, 0, w, h);
    results = [];
    for (j = 0, len = confetti.length; j < len; j++) {
      c = confetti[j];
      results.push(c.draw());
    }
    return results;
  };
  step();

你有

window.step = function() {
    var c, j, len, results;
    requestAnimationFrame(step);
    context.clearRect(0, 0, w, h);
    results = [];
    for (j = 0, len = confetti.length; j < len; j++) {
      c = confetti[j];
      results.push(c.draw());
    }
    return results;
  };

现在你只需要一些可以手动触发它的东西:

step();