手动调用匿名JS函数

时间:2015-10-29 17:42:29

标签: javascript

我在CodePen上发现了一点点confetti generating JavaScript。它由一个简单的:

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

效果很好,但我希望在某个时刻手动调用它。

我尝试将它放在一个函数中,就像这样(删除上面的两条包装线):

function confetti() {
   // Confetti code here
}

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

更新

看来我的代码被触发了。它完全与匿名功能无关。出于某种原因,它只会在浏览器调整大小时栩栩如生 - 这完全是另一个问题。怪异。

现在不确定这个问题是什么 - 这里的解决方案与实际问题无关。 (所描述的问题从一开始就不存在: - /)

2 个答案:

答案 0 :(得分:3)

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

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

但是,如果您想在其他地方使用它,我不会认为this将是相同的,所以相反我会写

var confetti = (function () {
    // pass
}).bind(this);

confetti();

您可以阅读call herebind here

上的文档

答案 1 :(得分:1)

允许您触发动画的功能称为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();