Annonymus功能与常规功能性能/优化

时间:2016-11-15 10:35:20

标签: javascript optimization memory-management

想知道下面给出的两个例子中的哪一个是"正确的方法来做到这一点"从优化的角度来看。让我们假设有问题的函数显然会运行一次。

示例1:

function example(){
  //do stuff
}
setTimeout(example, 1000);

示例2:

setTimeout(function(){
  //do stuff
}, 1000);

显然第二个例子必须多次声明一个函数,但函数本身在调用后会被垃圾收集,而示例只会声明一次,然后根据需要重新调用,但更重的是什么呢? / p>

3 个答案:

答案 0 :(得分:1)

检查此测试用例,它可以帮助您查看执行时间的差异 https://jsperf.com/anonymous-vs-defined-iv

答案 1 :(得分:0)

Lambda函数没有性能优势。它们更简单。

如果该函数非常局部且不被重用,我会使用它。

Lambda表达的好处包括:

  • 自由变量,即。一旦函数返回,里面的变量就会超出范围。 (我认为这被称为代码绑定)
  • 更容易添加而不是命名函数。

缺点是:

  • 难以调试。
  • 无法重复使用。

答案 2 :(得分:0)

我认为这个问题已得到解答,但作为事后的想法:

如果您担心污染范围,那么您可以将其全部包含在匿名函数中:



//Set return value of anonymous function to variable
var timer = (function() {
  //Create a function only in this scope
  //(Which is "close" to your setTimeout)
  function example() {
      console.log("test")
    }
    //Return your setTimeout call so you can manipulate it from the outside
  return setInterval(example, 100);
})();
//Interact with setTimeout
setTimeout(function() {
  clearInterval(timer);
}, 1000);