setTimeout(function() {doSth();}, 3) vs setTimeout(doSth, 3)?

setTimeout(function() {doSth();}, 3) vs setTimeout(doSth, 3)?

以上,哪个更好?为什么要使用

setTimeout(function() { anotherFunction(); }, 3);

而不是

setTimeout(anotherFunction, 3);

?

例如,the documentation for the testing tool jasmine使用了一个不带参数的匿名内部函数。但为什么?匿名函数样式的advantages/disadvantages是什么?

主要优点是变量存在的范围。

以这两种情况为例:

场景 1

function foo() {
  let element = document.getElementById('bar');
  element.classList.add('some-effect');
  setTimeout(function() {
    element.classList.remove('some-effect');
  }, 1000);
}

场景 2

function foo() {
  let element = document.getElementById('bar');
  element.classList.add('some-effect');
  setTimeout(removeEffect, 1000);
}

function removeEffect() {
  let element = document.getElementById('bar');
  element.classList.remove('some-effect');
}

在第一种情况下,您可以访问 element,因为您在 foo 函数的范围内。

在第二个中,您必须再次搜索 removeEffect 函数中的元素,因为范围已更改。

如果需要复用工作范围内的变量,使用第一种场景的代码。如果您真的不需要作用域中的变量或想让函数可重用,请使用第二种方案